输入输出格式 Input/output
输入格式:
一行:一个加法或减法的表达式
输出格式:
一个正整数,表示计算的结果(不可以有前导0)
一行:一个加法或减法的表达式
输出格式:
一个正整数,表示计算的结果(不可以有前导0)
标签:
123456789
1 #include<stdio.h> 2 #include<string.h> 3 int a[1001]={0},b[1001]={0}; 4 int i,ka,kb,k,c,temp; 5 char s[2002],ch; 6 void plus()//高精度加法函数 7 { 8 for(i=0;i<k;i++) 9 { 10 a[i]=a[i]+b[i]+c;//按位加 11 if(a[i]>=10)//处理进位(满十进一) 12 { 13 a[i]=a[i]%10; 14 c=1; 15 } 16 else c=0; 17 } 18 if(c>0) 19 { 20 a[k]=c; 21 k++; 22 } 23 } 24 void minus()//高精度减法函数 25 { 26 for(i=0;i<ka;i++) 27 { 28 if(a[i]<b[i])//判断这一位计算是否要借位 29 { 30 c=1; 31 a[i+1]--; 32 } 33 else 34 c=0; 35 a[i]=a[i]+c*10-b[i];//计算这一位的结果 36 k=ka; 37 while(a[k-1]==0&&k>0) 38 k--; 39 } 40 } 41 int main() 42 { 43 scanf("%s",s); 44 k=0; 45 while((s[k]!=‘+‘)&&(s[k]!=‘-‘))//以运算符为界,分开两个操作数,期前部分计入数组a 46 { 47 a[k]=s[k]-‘0‘; 48 k++; 49 } 50 ch=s[k];//记录操作符 51 ka=k;//记录操作符当前位置 52 kb=0; 53 k++;//跳过继续 54 while(k<strlen(s))//运算符后部分计入数组b 55 { 56 b[kb]=s[k]-‘0‘; 57 k++; 58 kb++;//记录运算符后部分的位数 59 } 60 if(ka>=kb) k=ka;//取a和b的最大长度,以便进行按位计算 61 else k=kb; 62 for(i=0;i<ka/2;i++)//读入是从高位到低位的顺序,计算之前应该反序 63 { 64 temp=a[i]; 65 a[i]=a[ka-i-1]; 66 a[ka-1-i]=temp; 67 } 68 for(i=0;i<kb/2;i++)//读入是从高位到低位的顺序,计算之前应该反序 69 { 70 temp=b[i]; 71 b[i]=b[ka-i-1]; 72 b[ka-1-i]=temp; 73 } 74 c=0;//进位初始化 75 if(ch==‘+‘)//传入加法函数 76 plus(); 77 else //传入减法函数 78 minus(); 79 for(i=k-1;i>=0;i--)//按倒序输出结果 80 { 81 printf("%d",a[i]); 82 } 83 printf("\n"); 84 return 0; 85 }
标签:
原文地址:http://www.cnblogs.com/geek-007/p/4355552.html