大数加法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加法相关的知识,希望对你有一定的参考价值。
要点:
(1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位;
(2)运算规则:同一位的两个数相加,然后再加上从低位来的进位,成为该位的和;
这个和再去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1(用 / 取整得到),本位的值是2(用 % 得到);
(3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位;
(4)如果两个加数位数不一样多,则按位数多的一个进行计算;
代码:
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; int main() { char a[1005]; char b[1005]; int aa[1005]; int bb[1005]; int c[1005]; while(~scanf("%s %s",&a,&b)) { memset(aa,0,sizeof(aa));///清空aa数组,避免因为初始化而加错值 memset(bb,0,sizeof(bb));///清空aa数组 ///计算两个加数的长度 ///如果两个加数位数不一样多,则按位数多的一个进行计算 int lena = strlen(a); int lenb = strlen(b); ///把加数 字符数组变成整型, ///而且因为计算的时候是又最低位开始计算, ///所以变成整型的时候改变一下顺序 ///即 char 型 aa=123456 放到整型里即a[5] = b [0]- ‘0‘ ; a[4] = b[1]-‘0‘ for(int i = 0; i < lena; i++) { aa[lena-1-i] = a[i]-‘0‘; } for(int i = 0; i < lenb; i++) { bb[lenb-1-i] = b[i]-‘0‘; } int lenc = max(lena,lenb); int jinwei = 0; for(int i = 0 ; i < lenc ; i++) { c[i] = (aa[i] + bb[i] + jinwei) % 10; jinwei = (aa[i] + bb[i] + jinwei) / 10; } if(jinwei != 0) { c[lenc++] = jinwei ; ///第一次即长度的值,之后才会自加 } for(int i = lenc - 1; i >= 0; i--) { printf("%d",c[i]); } puts(""); } return 0; }
以上是关于大数加法的主要内容,如果未能解决你的问题,请参考以下文章