首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个题目的多种编程方法

上一个帖子发出后,收到很多种修改程序的留言,现将搜集到的所有答案罗列出来供大家研讨。

在教材下篇 / C程序设计训练 / 第一层次 / 程序填空 / 第15题:

函数void add(char add1[],char add2[],char sum[])模拟手工加法运算过程(低位对齐,从低位向高位逐位相加,满十进一)。其中参数add1和add2均保存数字字符串,分别作为第一加数、第二加数,sum以字符串形式保存加法和。例如字符串"9045"和"7916"经add函数处理后,得到字符串"16961";"50345"和"4178"经add函数处理后,得到字符串"54523"。

第一种修改方法:在原程序基础上修改,改动少,符合原程序设计思想。

#include

#include

void add(char add1[],char add2[],char sum[]){

int len1,len2,len3;

int i,carry;

len1=strlen(add1);

len2=strlen(add2);

len3=len1

if(【1】) {

for(i=len1;i>=0;--i)

add1[i+len2-len1]=add1[i];

for(i=0; i

add1[i]='0';

}

if(len1>len2) {

for(i=len2;i>=0;--i)

add2[i+len1-len2]=add2[i];

for(i=0; i

add2[i]='0';

}

carry=0;

sum[len3]=0;

for(i=len3-1;i>=0;--i){

sum[i]=【2】

carry=sum[i]/10;

sum[i]=sum[i]%10+'0';

}

if(carry!=0){

for(i=len3;i>=0;--i)

sum[i+1]=sum[i];

sum[0]=carry+'0';

}

}

int main(){

char add1[10]={"50345"},add2[10]={"4178"},sum[11];

add(add1,add2,sum);

puts(sum);

return 0;

}

第二种修改方法,改变源程序设计思路,不再补'0'对齐,而是直接运算。程序如下:

#include

#include

void add_2(char add1[],char add2[],char sum[]){

int i,j,k,l,carry;

i=strlen(add1)-1;

j=strlen(add2)-1;

l=k=(i>j ? i:j)+1;

sum[k--]=0;

for(carry=0;i>=0 && j>=0;--i,--j,--k){

sum[k]= add1[i]-'0'+add2[j]-'0'+carry;;

carry=sum[k]/10;sum[k]=sum[k]%10+'0';

}

for(;i>=0;--i,--k){

sum[k]=add1[i]-'0'+carry;

carry=sum[k]/10;sum[k]=sum[k]%10+'0';

}

for(;j>=0;--j,--k){

sum[k]=add2[j]-'0'+carry;

carry=sum[k]/10;sum[k]=sum[k]%10+'0';

}

if(carry!=0){

for(k=l;k>=0;--k)

sum[k+1]=sum[k];

sum[0]= '1';

}

}

int main(){

char add[10][10]={{"1234"},{"4321"},

{"9876"},{"6789"},

{"9876"},{"1"},

{"12"},{"4008"},

{"9976"},{"25"}};

char sum[11];

int i;

for(i=0;i

add_2(add[i],add[i+1],sum);

printf("%s\t+%s\t=%s\n",add[i],add[i+1],sum);

}

return 0;

}

第三种修改方法与第二种修改方法类似,但程序更为简洁。

#include

#include

void add(char add1[],char add2[],char sum[]){

int i,j,k,l,carry;

i=strlen(add1)-1;

j=strlen(add2)-1;

l=k=(i>j ? i:j)+1;

sum[k--]=0;

carry=0;

while (i>=0 || j>=0) {

if (i

carry = add2[j]-'0'+carry;

}else if (j

carry =add1[i]-'0'+carry;

}else {

carry =add1[i]-'0'+add2[j]-'0'+carry;

}

sum[k--]=carry%10+'0';

carry=carry/10;

i--; j--;

}

if(carry!=0){

for(k=l;k>=0;--k)

sum[k+1]=sum[k];

sum[0]='1';

}

}

int main(){

char add1[10]={"85"},add2[10]={"11111115"},sum[11];

add(add1,add2,sum);

puts(sum);

return 0;

}

大家是否还有其他想法?请留言。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180924G0JLE500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券