【编程日常15.11.8】高精加法(C语言实现)
终于32学时的课都结业,课外自学的时间多了起来。简单记录下日常。。。高精加法,就是对爆int的数据进行加法。用字符串储存数据,然后按位处理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sum(char *a, char *b, char *c) {
int i, j, k;
int len1 = strlen(a);//计算a长度
int len2 = strlen(b);//计算b长度
k = (len1 > len2) ? len1: len2;//两数相加位数肯定是其中最大位数或最大位数加一,这里的k实际比数字位数多1,以为有\0
memset(c, '0', k);//初始化c,好像没有也可以
c = '\0';//设置结束,c的位数已经比k大一
int carry = 0, temp;
for(i=len1-1, j=len2-1; i>=0 || j>=0; i--, j--, k--)
{
temp = carry;//进位
if(i>=0) temp += a - '0';
if(j>=0) temp += b - '0';
if (temp >= 10) {
c = temp - 10 + '0';
carry = 1;
} else {
c = temp + '0';
carry = 0;
}
}
c = carry + '0';//设置第一位。
}
int main()
{
char a, b, c, *p;//这个是三个数组的版本,有两个数组的版本,空间优化
scanf("%s",a);
while(1) {
scanf("%s", b);
if(strcmp(b, "0") == 0) break;//可以多个数相加,0结束;
sum(a, b, c);
p = c;
if(*p == '0') p++;//处理第一位;
strcpy(a, p);
}
printf("The result is: %s \n", a);//输出;
system("pause");//按任意键结束;
return 0;
} 代码是百度的。。。注释是我自己写的,可能有错误多包涵,不明白的或者有啥想法可以交流下。{:5_92:} #include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
void jian(char *a,char *b,char *c);
char a,b,c,*p;
scanf("%s",a);
while(1){
scanf("%s",b);
if(strcmp(b, "0") == 0) break;
jian(a,b,c);
p=c;
if(*p == '0') p++;
if(*p == '0') p++;
strcpy(a, p);
}
printf("The result is: %s \n", a);
system("pause");
return 0;
}
void jian(char *a,char *b,char *c){
int i,j,k;
i=strlen(a);
j=strlen(b);
k=(i>j)?i:j;
memset(c,'0', k);
int charry=0,temp=0;
for(i--,j--;i>=0||j>=0;j--,i--,k--){
temp=-charry;
if (i>=0)temp+=a-'0';
if (j>=0)temp-=b-'0';
if(temp<0){
charry=1;
c=temp+'0'+10;
}
else {
charry=0;
c=temp+'0';
}
}
}
高精减,这个是自己写的= = 期待中 康小泡 发表于 2015-11-10 09:59
期待中
这种帖子发这里没问题么?我在想是不是发到吹水阁去 这个发这里没问题,不用放到吹水阁去。但是前面有一个需要 康小泡 发表于 2015-11-10 14:50
这个发这里没问题,不用放到吹水阁去。但是前面有一个需要
什么需要 谢谢楼主分享 :handshake
页:
[1]