急!求C语言高精度加法计算的程序
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/10 22:18:03
急!求C语言高精度加法计算的程序
编程完成两个1000位以内的正整数的加法运算
编程完成两个1000位以内的正整数的加法运算
#include <iostream>
#include <string>
using namespace std;
void swap(string &plus1, string &plus2) /*交换两数*/
{
\x05string t;
\x05t = plus1;
\x05plus1 = plus2;
\x05plus2 = t;
}
void BigPlus(string plus1, string plus2) /*大数加法*/
{
\x05int i,j,num,len1,len2;
\x05len1 = plus1.size()-1;
\x05len2 = plus2.size()-1;
\x05int *strplus = new int[len1+2]; /*动态开辟空间*/
\x05for (i = 0; i <= len1+1; ++i)
\x05\x05strplus[i] = 0; /*初始化为0*/
\x05for (i = len1, j = len2; i >= 0; --i,--j)/*plus1位数不小于plus2位数*/
\x05{
\x05\x05if (j >= 0)
\x05\x05\x05num = (plus1[i]-'0') + (plus2[j]-'0'); /*和*/
\x05\x05else
\x05\x05\x05num = (plus1[i]-'0'); /*和*/
\x05\x05if (num >= 10)
\x05\x05{
\x05\x05\x05strplus[i+1] += (num-10); /*本位*/
\x05\x05\x05strplus[i] = 1; /*高位:进1*/
\x05\x05}
\x05\x05else
\x05\x05{
\x05\x05\x05strplus[i+1] += num; /*本位*/
\x05\x05}
\x05}
\x05i = strplus[0] == 0 ? 1 : 0; /*舍去高位无用0*/
\x05for ( ; i <= len1+1; ++i) /*打印结果*/
\x05\x05cout<<strplus[i];
\x05cout<<endl;
\x05delete[] strplus;
\x05strplus = NULL;
}
int main()
{
\x05string plus1,plus2;
\x05
\x05cin>>plus1>>plus2;
\x05if (plus1.size() < plus2.size()) /*使plus1位数不小于plus2*/
\x05\x05swap(plus1,plus2);
\x05BigPlus(plus1,plus2); /*大数加法*/
\x05return 0;
}
快速 超级大数加法,支持无上限大数加法~
思想:由于int型最大为10亿左右,当超过这个位数的时候,将会给计算带来问题,这时候就需要大数计算.
这里讲数字按位储存在数组里面进行操作~
然后对数组进行按位加,需要注意的就是进位操作.
#include <string>
using namespace std;
void swap(string &plus1, string &plus2) /*交换两数*/
{
\x05string t;
\x05t = plus1;
\x05plus1 = plus2;
\x05plus2 = t;
}
void BigPlus(string plus1, string plus2) /*大数加法*/
{
\x05int i,j,num,len1,len2;
\x05len1 = plus1.size()-1;
\x05len2 = plus2.size()-1;
\x05int *strplus = new int[len1+2]; /*动态开辟空间*/
\x05for (i = 0; i <= len1+1; ++i)
\x05\x05strplus[i] = 0; /*初始化为0*/
\x05for (i = len1, j = len2; i >= 0; --i,--j)/*plus1位数不小于plus2位数*/
\x05{
\x05\x05if (j >= 0)
\x05\x05\x05num = (plus1[i]-'0') + (plus2[j]-'0'); /*和*/
\x05\x05else
\x05\x05\x05num = (plus1[i]-'0'); /*和*/
\x05\x05if (num >= 10)
\x05\x05{
\x05\x05\x05strplus[i+1] += (num-10); /*本位*/
\x05\x05\x05strplus[i] = 1; /*高位:进1*/
\x05\x05}
\x05\x05else
\x05\x05{
\x05\x05\x05strplus[i+1] += num; /*本位*/
\x05\x05}
\x05}
\x05i = strplus[0] == 0 ? 1 : 0; /*舍去高位无用0*/
\x05for ( ; i <= len1+1; ++i) /*打印结果*/
\x05\x05cout<<strplus[i];
\x05cout<<endl;
\x05delete[] strplus;
\x05strplus = NULL;
}
int main()
{
\x05string plus1,plus2;
\x05
\x05cin>>plus1>>plus2;
\x05if (plus1.size() < plus2.size()) /*使plus1位数不小于plus2*/
\x05\x05swap(plus1,plus2);
\x05BigPlus(plus1,plus2); /*大数加法*/
\x05return 0;
}
快速 超级大数加法,支持无上限大数加法~
思想:由于int型最大为10亿左右,当超过这个位数的时候,将会给计算带来问题,这时候就需要大数计算.
这里讲数字按位储存在数组里面进行操作~
然后对数组进行按位加,需要注意的就是进位操作.