C语言中,如何“利用字符数组实现两个大整数的加法”? C程:利用字符数组实现两个大整数的加法。(求大神帮忙改下程序...

\u8bf7\u7f16\u5236C\u7a0b\u5e8f\u5b9e\u73b0\u529f\u80fd\uff1a\u5229\u7528\u5b57\u7b26\u6570\u7ec4\u5b9e\u73b0\u4e24\u4e2a\u5927\u6574\u6570\u7684\u52a0\u6cd5\u3002

#include
#include
#include

void RightMoving(char *s,int n)
{
char *p=s,*q;
while(*p++!='\0');
for(q=p;q!=s;q--)
*(q-1+n) = *(q-1);
for(int i=0;i<n;++i)s[i] = '0';
}
int LargerIntegerAdd(char *result,char *n1,char *n2)
{
int i,t=0,num;
num = strlen(n1)>strlen(n2)?strlen(n1):strlen(n2);

result[num]='\0';
for(i=num-1;i>-1;i--)
{
result[i] = (n1[i] + n2[i] + t - '0');
t=0;
if(result[i]>'9')
{
t++;
result[i] -= 10;
}
}
return t;
}
int main()
{
int i;
char n1[200],n2[200],result[200];
gets(n1);
gets(n2);

printf("%s+%s=",n1,n2);
if(strlen(n1)>strlen(n2))
RightMoving(n2,strlen(n1)-strlen(n2));
if(strlen(n1)<strlen(n2))
RightMoving(n1,strlen(n2)-strlen(n1));
i = LargerIntegerAdd(result,n1,n2);
if(i>0)
printf("%d",i);
puts(result);
return 0;
}

\u9519\u8bef\u4e0d\u5c11\uff0c
\u9996\u5148
char a[N],b[N]; char sum[N]; a[N]={'\0'}; b[N]={'\0'}; sum[N]={'\0'};\u8fd9\u548b\u80fd\u6210\uff0c\u4f60\u8f93\u5165\u7684\u957f\u5ea6\u5c31\u4e0d\u77e5\u9053\uff0c\u600e\u4e48\u7ed9\u6700\u540e\u7f6e0\u3002
\u6211\u628a\u6b63\u786e\u7684\u5168\u90e8\u8d34\u51fa\u6765\uff0c\u4f60\u770b\u770b\u3002
void strive(char *r){ int i; char temp[100]; int n; n = strlen(r); for (i = 0; i < n; i++) temp[n -1- i] = r[i]; temp[n] = '\0'; strcpy(r, temp); puts(r); printf("\n");}void add(char *a, char *b, char *c){ char *p=c; int digit=0,carry=0,temp = 0; while ((*a != '\0') && (*b != '\0')) { temp = *a - '0' + *b - '0' + carry; digit = temp % 10; carry = temp / 10; *p++ = digit + '0'; a++; b++; } while (*a != '\0') { temp = *a - '0' + carry; digit = temp % 10; carry = temp / 10; *p++ = digit + '0'; a++; } while (*b != '\0') { temp = *b - '0' + carry; digit = temp % 10; carry = temp / 10; *p++ = digit + '0'; b++; } *p = '\0';}int main(){ void strive(char *r); void add(char *a, char *b, char *c); char a[100], b[100]; char sum[100]; printf("Input the a[],b[]:\n"); gets(a); gets(b); strive(a); strive(b); add(a, b, sum); strive(sum); return 0;}\u7ed3\u679c\u4e3a\uff1a

#include <string.h>
#include <stdio.h>
void f1(char *a,char *b) //一个函数
{
char t[101];
if(strlen(a)<strlen(b)) //比较前的准备
{
t[101]=0;
strcpy(t,a); //把a中内容拷贝到字符串t中
strcpy(a,b);
strcpy(b,t); //以上三条实现a与b的交换
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1); //n是字符串t1的长度
for(i=0;i<n;i++)
t[i]=t1[n-1-i]; //把t1中的内容赋给与它的下标对称的下标t中
t[n]='\0'; //t最后一个位置赋结束字符
}
void f2(char *b,int q,int l)
{
char t[101]; //定义一个字符数组
int i;
for(i=0;i<q-l;i++)
t[i]='0';
t[q-l]='\0';
strcat(b,t); //把t连接到b去除结束字符‘/0’的字符后,保持和字符串a长度一致,便于运算
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a); //把字符串a拷贝到字符串s中
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判断两个数字的和是否大于十 ,若大于10考虑进位问题
{
s[i]+=(b[i]-58); //大于10进位,s[i]加上进位后的数字,运算后赋给s[i]
s[i+1]++; //s[i+1]进位加1,运算后赋给s[i]
}
else
s[i]+=(b[i]-48); //否则不进位,运算后赋给s[i]
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("1"); //打印1
for(i=l-2;i>=0;i--)
printf("%c",s[i]); //其余的原样输出
}
else
for(i=l-1;i>=0;i--)
printf("%c",s[i]); //直接输出
}

main()
{
char a[101],b[101],a1[101],b1[101],sum[101]={0};
int q,l;
printf("请输入大整数字符a\n ");
gets(a1); //输入字符a1
printf("请输入大整数字符b\n ");
gets(b1); //输入字符b1
f1(a1,b1);//调用函数f1
f(a1,a); //调用f
f(b1,b); //调用f
q=strlen(a); //q是字符串a的长度
l=strlen(b); //l是字符串b的长度
f2(b,q,l); //调用f2使a,b长度一致
add(a,b,sum,q); //调用add,运算a,b字符串的结果
printf("a+b=");
print(sum); //调用print函数
printf("\n");
}

我只把一些看起来需要注释的都注释了,一些特别简单的基础的·应该不用注释了,实际上只要多看一些代码,这些都是慢慢可以看懂得。

  • c璇█瀛楃鏁扮粍浣跨敤鏂规硶
    绛旓細璇存槑锛''浠h〃ASCII鐮佷负0鐨勫瓧绗︼紝浠嶢SCII鐮佽〃涓彲浠ユ煡鍒癆SCII鐮佷负0鐨勫瓧绗︿笉鏄竴涓彲浠ユ樉绀虹殑瀛楃锛岃屾槸涓涓滅┖鎿嶄綔绗︹濓紝鍗冲畠浠涔堜篃涓嶅共銆傜敤瀹冩潵浣滀负瀛楃涓茬粨鏉熸爣蹇椾笉浼氫骇鐢熼檮鍔犵殑鎿嶄綔鎴栧鍔犳湁鏁堝瓧绗︼紝鍙捣涓涓緵杈ㄥ埆鐨勬爣蹇椼傚C璇█澶勭悊瀛楃涓茬殑鏂规硶鐢变互涓婄殑浜嗚В鍚庯紝鍐嶅瀛楃鏁扮粍鍒濆鍖栫殑鏂规硶琛ュ厖涓...
  • C璇█涓,濡備綍鈥鍒╃敤瀛楃鏁扮粍瀹炵幇涓や釜澶ф暣鏁扮殑鍔犳硶鈥?
    绛旓細gets(b1); //杈撳叆瀛楃b1 f1(a1,b1);//璋冪敤鍑芥暟f1 f(a1,a); //璋冪敤f f(b1,b); //璋冪敤f q=strlen(a); //q鏄瀛楃涓a鐨勯暱搴 l=strlen(b); //l鏄瓧绗︿覆b鐨勯暱搴 f2(b,q,l); //璋冪敤f2浣縜锛宐闀垮害涓鑷 add(a,b,sum,q); //璋冪敤add锛岃繍绠梐锛宐瀛楃涓茬殑缁撴灉 printf("a+b=...
  • C璇█ 鐢ㄥ瓧绗︽暟缁缂栫▼瀹炵幇鎵惧嚭瀛楃涓蹭腑鏈澶х殑閭d釜瀛楃鍏冪礌,骞惰緭鍑鸿...
    绛旓細C璇█绋嬪簭锛歩nclude <stdio.h>#include <string.h>#define MAX 80void main(){char arr[MAX + 1];char max;int len;int i;printf("Input a string:\n");gets(arr);max = '\0';len = strlen(arr);for(i=0; i<len; i++){if(arr[i] > max){max = arr[i];}}printf("The...
  • C璇█涓瓧绗︽暟缁鍙婂瓧绗︿覆澶勭悊鍑芥暟
    绛旓細1.鍙互閫氳繃涓烘瘡涓暟缁勫厓绱犳寚瀹氬垵鍊煎瓧绗︽潵瀹炵幇銆俢har str[10]={ 'I',' ','a','m',' ',鈥榟鈥,'a','p','p','y'};char str[ ]={"I am happy"}; 鍙互鐪佺暐鑺辨嫭鍙凤紝濡備笅鎵绀 char str[ ]="I am happy";char country[10][20]={鈥渃hina鈥,鈥漥apanese鈥,鈥︹;娉ㄦ剰锛氫笂杩拌繖...
  • 涓嬮潰鐨C璇█绋嬪簭涓,璋冪敤鍑芥暟鎬庝箞鍐欏氨鍙互灏嗕竴涓瀛楃涓叉暟缁浣滀负瀹炲弬
    绛旓細瀛楃涓叉暟缁勪笉鑳戒綔涓哄疄鍙锛屽瓙鍑芥暟鎯宠浣跨敤璋冪敤鍑芥暟涓殑瀛楃涓插彲浠ュ皢瀛楃涓叉墍鍦ㄥ唴瀛樼殑鍦板潃浼犻掕繃鍘诲氨鍙互浜嗭紙鏁扮粍鍚嶏紝鎴栬呮寚閽堬級
  • 鎬庢牱瀹炵幇鍦C璇█瀛楃鏁扮粍涓瀛楃涓蹭腑鐨勬煇涓瓧绗︾殑鍒犻櫎
    绛旓細鍙互鎶婅鍒犻櫎浣嶇疆i涔嬪悗锛宨+1浣嶇疆寮濮嬬殑涓插線鍓嶅鍒朵竴閬嶃俢har t[]="hello world";//蹇呴』鏄潪const銆佸彲鍐欑殑绌洪棿銆俰nt d=5;//鍒犻櫎绗5涓綅缃殑绌烘牸 strcpy(t+d,t+d+1);printf("%s",t);=== helloworld
  • C璇█涓庝箞鎶瀛楃鏁扮粍閲岀殑鏁版嵁瀛樻斁鍒瀛楃涓叉暟缁涓
    绛旓細鍒╃敤C璇█鏍囧噯搴撲腑鐨剆trtok锛堬級鍑芥暟锛屽彲浠ヨ交鏉惧揩鎹风殑灏嗕互绌烘牸鍒嗛殧寮鐨勪竴涓插瓧绗﹀垎鎴愬涓瓙涓诧紝瀛樻斁鍒板瓧绗︽寚閽鏁扮粍涓傚嚱鏁拌鏄庯細include <string.h> //澶存枃浠 char *strtok(char *str, const char *delim);strtok()鐢ㄦ潵灏嗗瓧绗︿覆鍒嗗壊鎴愪竴涓釜鐗囨銆傚弬鏁皊tr鎸囧悜娆插垎鍓茬殑瀛楃涓诧紝鍙傛暟delim鍒欎负鍒嗗壊瀛楃涓蹭腑...
  • C璇█static 鍔犲湪瀛楃鏁扮粍涓墠鑳藉緱鍒版纭殑瀛楃涓,浠涔堝師鐞?
    绛旓細鎵浠c璇█鎯宠瀹炵幇鐪熸鎰忎箟涓婄殑瀛楃涓诧紝蹇呴』static 鍔犲湪瀛楃鏁扮粍鍓嶉潰銆傚綋鐒舵瘡涓闂ㄨ瑷閮芥槸涓嶄竴鏍风殑锛屾瘮濡俲ava灏卞彲浠ョ洿鎺tring鎴栬卻tringbuff杩涜瀹氫箟锛屼笉杩囦袱鑰呬篃鏈夊緢澶х殑鍖哄埆锛屾瘮濡俿tring鏄痜inal鎵淇グ锛岃繖鏄笉鍙洿鏀圭殑锛屽洜姝ゆ瘡娆℃柊寤哄厓绱犻兘鏄紑杈熶竴涓柊鐨勭┖闂达紝鑰宻tringbuff骞朵笉浼氾紝鑷繁甯︽湁鏁扮粍缂撳啿鍖猴紝...
  • 鎬庢牱瀹炵幇鍦C璇█瀛楃鏁扮粍涓瀛楃涓蹭腑鐨勬煇涓瓧绗︾殑鍒犻櫎
    绛旓細int main(){ char a[10] = {"1234567890"};int i, j;for(i = 0; i < strlen(a); i++){ if(a[i] == '7'){ for(j = i; j < strlen(a) - 1; j++){ a[j] = a[j + 1];} a[j] = '\0';break;} } for(i = 0; i < strlen(a); i++){ printf("%c...
  • C璇█涓庢牱瀹氫箟涓涓瀛楃鏁扮粍,鐒跺悗鏍规嵁浣犺緭鍏ョ殑鏉ヨ祴鍊?
    绛旓細include<stdio.h>void main(){char str[50];//瀛楃鏁扮粍gets(str);//鎺ュ彈浣犺緭鍏ョ殑瀛楃puts(str);//杈撳嚭瀛楃}
  • 扩展阅读:定义一个字符数组 ... c++ 输入一个字符数组 ... c语言字符二维数组 ... c++ 多个字符串如何定义 ... c语言转义字符 ... c #根据符号分割字符串 ... c语言编译器 ... c#字符串长度 ... c语言char定义字符串数组 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网