求a-b.
思路如下:
1.定义一个函数使数组逆向输出;
2.定义三个数组,求两个数组的长度,调用字符串逆值函数,比较两个数组的长度,当某个数长度小的时候,就在前面补“0”,之后让i依次为数组里的数,求该位数字的值,当两数相减为负数时,即像上一位借位,然后相当于给负数加上10,再进行下一位计算时,记得给被减数-1。
3.循环结束时,若前面的数为零,则不输出,应输出数组中非零的数据,再依次输出。
#include <bits/stdc++.h> using namespace std; void rev(char a[], int len) { for(int i = 0; i < len / 2; ++i) swap(a[i],a[len - i - 1]); } char a[1000],b[1000],s[1000]; int main() { int ai, bi, val, bit; int len, len1, len2; while(cin >> a >> b) { len1 = strlen(a); len2 = strlen(b); len = len1 > len2 ? len1 : len2; rev(a,len1); rev(b,len2); bit = 0; for(int i = 0; i < len; ++i){ ai = i < len1 ? a[i] - '0' : 0; bi = i < len2 ? b[i] - '0' : 0; ai -= bit; bit = 0; if(ai < bi){ ai+=10; bit += 1; } s[i] = ai - bi + '0'; } bool flag = true; for(int i = len - 1; i >= 0; --i){ if(s[i] == '0' && flag) continue; flag = false; putchar(s[i]); }puts(""); }return 0; }
PS:以上是c++的代码,区别就是cin,布尔类型等的区别。
下面贴上c的代码:
#include <stdio.h> #include <string.h> void rev(char str[],int len){ int t,i; for (i = 0;i < len / 2;i++){ t = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = t; } } int main() { char str1[1000],str2[1000],sum[1000]; int len,len1,len2,i; int l1,l2,val,carry; while(scanf("%s %s",str1,str2) != EOF){ len1 = strlen(str1); len2 = strlen(str2); rev(str1,len1); rev(str2,len2); carry = 0; len = len1 < len2 ? len2:len1; for (i = 0;i <= len;i++){ l1 = i < len1 ? str1[i] - '0':0; l2 = i < len2 ? str2[i] - '0':0; l1 -= carry; carry = 0; if (l1 < l2){ l1 += 10; carry += 1; } sum[i] = l1 - l2 +'0'; } int flag = 1; for(i = len - 1;i >= 0; i--){ if(sum[i] =='0' && flag) continue; flag = 0; putchar(sum[i]); }puts(""); }return 0; }