社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
学过编程的大家一定对int long 不陌生吧,那么自然是知道它们各自能表达的数范围,比如int能表示范围为2^32,这看起来很大,但在大数据时代的如今,不说是int 哪怕是long long也是不够的,那么为了使用或计算这些超出或远超整形大小的数,我们就需要使用多个数来表示这一个数,表示多个数的数据类型在c语言里有数组和字符串。
数组:每个数组元素储存一位数(不一定是个位数,也可能是10 12甚至2000),数组的优点是可以直接进行加减计算,而缺点却是无法直接输入,每位数之间需要有分隔符,这不符合数值输入的习惯
字符串:字符串的优点便是可以直接输入,符合数值输入的习惯,但是它每一个元素储存的是一个字符而不是数字,不可以直接进行运算
综上所述,取长补短,用字符串读取输入,用数组计算输出。
附上代码
#include<stdio.h>
#include<string.h>
#define MAX 1000
int main(void)
{
char str[MAX];
int arr1[MAX]={0},arr2[MAX]={0},len,len1,len2,i,j;
scanf("%s",str);
len1=strlen(str);
for(i=0;i<len1;i++)//字符串倒叙导入数组,方便从低位开始运算
arr1[i]=str[len1-1-i]-'0';
scanf("%s",str);
len2=strlen(str);
for(i=0;i<len2;i++)
arr2[i]=str[len2-1-i]-'0';//字符串中的是字符,要转换成数字
len=(len1>len2)?len1:len2;
for(i=0;i<len;i++)
{
arr1[i+1]+=j=(arr1[i]+arr2[i])/10;//进位
arr1[i]=(arr1[i]+arr2[i])%10;//保留
}
if(j)len++;//最后一位是否进位
for(i=0;i<len;i++)
printf("%d",arr1[len-1-i]);
return 0;
}
当然,上述代码仅能处理整形加减,想要处理浮点数则需要添加判断条件,以识别小数点,这时最后导出要用到的是字符串而不是数组,当然我们也可以同时处理多位数而不只是一位数,这样可以减少大量计算以提高运行速度,代码将在以后更新。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!