#include<stdio.h> #include<string.h> char a[205]; char b[205]; int main() { int a1,b1,i,n; while(scanf("%s %s",a,b)!=EOF) { int c[205]= {0},d[205]= {0}; a1=strlen(a);///字符输入两个大整数 b1=strlen(b); for(i=1; i<=a1; i++)///将字符串的每一位保存在数组中,注意这里逆过来了,便于计算时对齐 { c[i]=a[a1-i]-'0'; } for(i=1; i<=b1; i++) { d[i]=b[b1-i]-'0'; } if(a1>b1)///将减的次数要取大的,多的课当做减0 n=a1; else n=b1; for(i=1; i<=n; i++)///前面已经反转了所以从前面开始计算 { c[i]=c[i]-d[i]; if(c[i]<0)///如果减数小于被减数,高位减一,模仿竖式减法 { c[i+1]-=1; c[i]+=10; } } int x=0; ///去除强导0,即第一个非0数字前的0, ///注意最后一位不要去应为可能出现得数为0的情况 for(i=n; i>=2; i--) { if(c[i]==0) { x++; } else break; } for(i=n-x; i>=1; i--) { printf("%d",c[i]); } printf(" "); } }
此题用字符串读入就行,在转化成数组,模拟竖式减法就行,主要是注意答案为0的情况
原题链接:点我转移