大数运算之加法
大数运算之加法:思路:1.一次性输入大数,利用for循环读入缓冲区数据,当读到回车符时结束,将char型转化为int型数据,char-'0'=int 2.倒置数组。因为是累加填入数组,运算时从低位开始,而实际运算是从右边开始的,方便进位。采用对折 /2交换元素,无需考虑奇偶数。 3.长度对齐。长度不同时,可以直接将较长数组的低位加上进位直接赋值。 4.进位。%10 /10 操作,分别得到原位置的值,与进位值。然后加上进位值得到最终值 5.输出。需倒序输出。 源代码:#include<stdio.h> int a[1000]= {0}; int b[1000]= {0}; int main() { charinput; inti=0,aNum,bNum,carry=0; printf("输入第一个数:"); for(i=0;;i++) { scanf("%c",&input); a[i]=input-'0'; if(input=='n'){ i--; break; } } aNum=i+1; printf("输入第二个数:"); for(i=0;;i++) { scanf("%c",&input); b[i]=input-'0'; if(input=='n'){ i--; break; } } bNum=i+1; for(i=0;i<aNum/2; i++) { inttemp=a[i]; a[i]=a[aNum-1-i]; a[aNum-1-i]=temp; } for(i=0;i<bNum/2; i++) { inttemp=b[i]; b[i]=b[bNum-1-i]; b[bNum-1-i]=temp; } if(aNum==bNum){ for(i=0;i<bNum; i++) { inttemp1=(a[i]+b[i]+carry)%10; inttemp2=(a[i]+b[i]+carry)/10;//进位 a[i]=temp1; carry=temp2; } if(carry>0){ aNum++; a[aNum-1]=carry; } }else if(aNum>bNum) { for(i=0;i<bNum; i++) { inttemp1=(a[i]+b[i]+carry)%10; inttemp2=(a[i]+b[i]+carry)/10;//进位 a[i]=temp1; carry=temp2; } for(i=bNum;i<aNum; i++) { inttemp2=(a[i]+carry)/10;//进位 a[i]=(a[i]+carry)%10; carry=temp2; } if(carry>0){ aNum++; a[aNum-1]=carry; } }else { for(i=0;i<aNum; i++) { inttemp1=(a[i]+b[i]+carry)%10; inttemp2=(a[i]+b[i]+carry)/10;//进位 b[i]=temp1; carry=temp2; } for(i=aNum;i<bNum; i++) { inttemp2=(b[i]+carry)/10;//进位 b[i]=(b[i]+carry)%10; carry=temp2; } if(carry>0){ bNum++; b[bNum-1]=carry; } } if(aNum==bNum){ for(i=aNum-1;i>=0; i--) printf("%d",a[i]); }else if(aNum>bNum) { for(i=aNum-1;i>=0; i--) printf("%d",a[i]); }else { for(i=bNum-1;i>=0; i--) printf("%d",b[i]); } return0; } 编译信息:Compiling single file... -------- - Filename: D:dev++add1.cpp - Compiler Name: TDM-GCC 4.9.2 64-bitRelease ? Processing C++ source file... -------- - C++ Compiler:E:Dev-CppMinGW64bing++.exe - Command: g++.exe"D:dev++add1.cpp" -o "D:dev++add1.exe"? -I"E:Dev-CppMinGW64include"-I"E:Dev-CppMinGW64x86_64-w64-mingw32include"-I"E:Dev- CppMinGW64libgccx86_64-w64-mingw324.9.2include"-I"E:Dev-CppMinGW64libgccx86_64-w64-mingw324.9.2includec++"-L"E:Dev-CppMinGW64lib"- L"E:Dev-CppMinGW64x86_64-w64-mingw32lib" -static-libgcc ? Compilation results... -------- - Errors: 0 - Warnings: 0 - Output Filename: D:dev++add1.exe - Output Size: 129.63671875 KiB - Compilation Time: 0.34s 测试数据:输入第一个数:87687617865716765863475671649750184895789346576 输入第二个数:87458173475673647561083469576876746736787676790610834 87458261163291513277849333052548396486972572579957410 -------------------------------- Process exited after 17.07 seconds withreturn value 0 请按任意键继续. . . 版权声明:著作权归作者所有?。? 发表日期:2016年10月9日? 来源:CSDN? (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |