- //相加
- char* AddNum(char* a,char* b)
- {
- int maxlen = max(strlen(a),strlen(b));
- //多申请两个字符,一个是结束符'/0',一个是放到第一个字符,当两个数最高位相加后,如果有进位,保存到这里
- char* p = new char[maxlen+2];
- //为最后一位写上结束符
- *(p+maxlen+1)='/0';
- //声明两个指针分别指向a和b的末尾,不包含结束符
- char* pA=a+strlen(a)-1;
- char* pB=b+strlen(b)-1;
- int m=0;
- int n=0;
- //进位
- int c=0;
- for (int i=maxlen;i>0;i--)
- {
- m = n = 0;
- //因为当pA到达第一个字符时,即pA=a时,也要进行计算,所以这里用(pA-1)来判断
- //因为字符'0'的Asic是48,所以1就是49,要转成数字,就要减去48
- if ((pA+1) != a)
- {
- m = *pA - 48;
- pA--;
- }
- if ((pB+1) != b)
- {
- n = *pB - 48;
- pB--;
- }
- //为p指针的第i个字符赋值
- *(p+i) = (m+n+c) % 10 + 48;
- //取得进位
- c = (m+n+c) / 10;
- }
- *p = 48+c;
- return p;
- }
- //相减
- char* SubNum(char* a,char* b)
- {
- int maxlen = max(strlen(a),strlen(b));
- //不考虑被减数最高位不够减的情况
- char* p = new char[maxlen+1];
- //为最后一位写上结束符
- *(p+maxlen)='/0';
- //声明两个指针分别指向a和b的末尾,不包含结束符
- char* pA=a+strlen(a)-1;
- char* pB=b+strlen(b)-1;
- int m=0;
- int n=0;
- //借位位
- int c=0;
- for (int i=maxlen-1;i>=0;i--)
- {
- m = n = 0;
- //因为当pA到达第一个字符时,即pA=a时,也要进行计算,所以这里用(pA-1)来判断
- //因为字符'0'的Asic是48,所以1就是49,要转成数字,就要减去48
- if ((pA+1) != a)
- {
- m = *pA - 48;
- pA--;
- }
- if ((pB+1) != b)
- {
- n = *pB - 48;
- pB--;
- }
- //不够减,要借位
- if (m<n)
- {
- //为p指针的第i个字符赋值
- *(p+i) = 10+m-n-c + 48;
- c = 1;
- }
- else
- {
- //虽然够减,但是如果再算是借走的一位,那么就小于0了
- if (m-n-c<0)
- *(p+i) = 10+m-n-c + 48;
- else
- {
- *(p+i) = m-n-c + 48;
- c = 0;
- }
- }
- }
- return p;
- }
- int main()
- {
- char* a="75546666666666666666666666666663366667554666666666665676787667678666336666";
- char* b="66666666666666666666666666666666666667554666666666666654656565675666336666";
- char* p =AddNum(a,b);
- printf("%s/n","两数相加等于:");
- printf("%s/n",p);
- p =SubNum(a,b);
- printf("%s/n","两数相减等于:");
- printf("%s/n",p);
- return 0;
- }
大数据相加减
最新推荐文章于 2022-02-23 15:02:25 发布