1169:大整数减法
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
求两个大的正整数相减的差。
【输入】
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
【输出】
一行,即所求的差。
【输入样例】
9999999999999999999999999999999999999
9999999999999
【输出样例】
9999999999999999999999990000000000000
【来源】
NO
1. #include <cstdio> 2. #include <cstring> 3. #include <iostream> 4. using namespace std; 5. int main() 6. { 7. char ach[201],bch[201]; 8. int a[201],b[201],c[205],lena,lenb,lenc,i,j,jw; 9. memset(a,0,sizeof(a)); 10. memset(b,0,sizeof(b)); 11. memset(c,0,sizeof(c)); 12. //以字符串型读入数据 13. scanf("%s",ach); 14. scanf("%s",bch); 15. //获取字符串长度 16. lena=strlen(ach),lenb=strlen(bch); 17. //反转字符串取得整型数组 18. for(i=lena-1,j=1;i>=0;i--,j++) a[j]=ach[i]-'0'; 19. for(i=lenb-1,j=1;i>=0;i--,j++) b[j]=bch[i]-'0'; 20. //对位相减 注意借位 21. jw=0; 22. lenc=1; 23. while(lenc<=lena||lenc<=lenb){ 24. if(a[lenc]>=(b[lenc]+jw)){ 25. c[lenc]=a[lenc]-b[lenc]-jw; 26. jw=0; 27. } 28. else{ 29. c[lenc]=a[lenc]+10-b[lenc]-jw; 30. jw=1; 31. } 32. lenc++; 33. } 34. while(c[lenc]==0) lenc--;//获取数组长度 35. for(i=lenc;i>0;i--) printf("%d",c[i]);//逆序输出 36. return 0; 37. }