利用数组来模拟大整数的计算
大整数加法的实现:
补充1:
铺垫的知识点先展示一下:
//存放大数的一些方法
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char c=0;
int b=0;
cin>>c;
b=c-'0';
cout<<b;
return 0;
}
?补充2:
strlen函数的应用
//验证str的一个长度的问题
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char arr[10]={0};
int len=0;
cin.get(arr,10);//get的一个具体的用法,cin.get(表达式1,表达式2);//表达式1所要存放的地址。表达式2所要存储的长度
len=strlen(arr);//strlen函数的调用,strlen();//需要用到头文件#include<cstring>
cout<<len;
return 0;
}
?补充3:
算法,两个数组交换位置的写法
//输入一个字符型数组,反向输出一个整数型数组。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char arr_str[10];
int arr_value[10];
int len;
cin.get(arr_str,10);
len=strlen(arr_str);//3
for(int i=0,j=len-1;i<len;i++,j--)//0 1 2 3 4 5//这个地方书写可以学习一下。
{
arr_value[i]=arr_str[j]-'0';//错误1:len-1是一个固定值。 //错误3:字符转数字减去'0'
//cout<<arr_value[i]<<endl;
}
//cout<<arr_value;//错误2:arr_value,这样输出是错误的。需要用到循环。
for(int i=0;i<len;i++) //0 1 2 3 4 5
{
cout<<arr_value[i];
}
return 0;
}
最终代码:
#include<iostream>
#include<cstring>
using namespace std;
//const int max=200;
int main()
{
int max=200;
int sum[max] = {0};// 定义了存放大数字的数组 //这个位置存放最终值
char num1[max],num2[max];// num1 和 num2 存放两个字符串
int i,j,len;
int n2[max]={0};
cin.get(num1,max);//存入到数组num1之中
cin.get();//吸收空格
cin.get(num2,max);//存入到数组num2之中
int len1=strlen(num1),len2=strlen(num2);// 计算输入的两个数值长度
len=len1>len2?len1:len2;//最大数位循环
for(i=len1-1,j=0;i>=0;i--,j++)//要想明白这个地方为什么是len1-1
{
sum[j]=num1[i]-'0';//这个地方可以研究一下
}
for(i=len2-1,j=0;i>=0;i--,j++)//这个地方的书写实际就是把两个数组的值换了一下。
{
n2[j]=num2[i]-'0';//给到了n2
}
for (i=0;i<=len;i++)//len这个地方用到了,len,个位加个位 //两个数组相加的算法。
{
sum[i]+=n2[i]; //个位个位相加
if(sum[i]>9)// 一个下标下大于10了,就进行判断一下。
{
sum[i]-=10;//直接就减去10
sum[i+1]++;//这个代表的意思是,进位//有个问题 //怎么解决999+91的问题的 ?
//
}
}
if(sum[len]!=0) len++;//最高位是不是产生了一个进位。
cout<<" "<<num1<<endl<<"+"<<endl<<" "<<num2<<endl<<"="<<endl<<" ";
for(i=len-1;i>=0;i--)cout<<sum[i];
cout<<endl;
return 0;
}
|