C语言!
以下程序完成两个长正整数的加法运算并输出计算结果。函数add模拟手工加法运算的过程,将a和b指向的数组中存储的两个以字符串形式表示的n位正整数相加,并将运算结果以字符串形式保存到c指向的数组中。main函数中p1和p2数组分别存放被加数字符串和加数字符串,p3数组存放运算结果字符串。若p1中的字符串为"1000000001"、p2中的字符串为"9000000009",调用add函数后p3得到的是以字符串表示的这两个整数相加的结果"10000000010"。试完善程序以达到要求的功能。#include "stdio.h"
#include "string.h"
void add(char a[],char b[],char c[], int n )
{int i,k;
c='\0'; k=0;
for(i=n-1;i>=0;i--)
{c=(a-'0')+(b-'0')+k; // 为啥有减去‘0’,这表示啥呀?
k= c/10 ;
c=c%10+'0';
}
if(k)
{for(i=n+1;i>0;i--)
c= c ;
c=k+'0';
}
main()
{char p1="1000000001",p2="9000000009",p3;
int i,x=strlen(p1),y=strlen(p2);
if(x<y)
{for(i=x;i>=0;i--)
{p1=p1;p1='0';} // 为啥还要p1='0'
x=y ;
}
if(x>y)
for(i=y;i>=0;i--)
{p2=p2;p2='0'; }
add(p1,p2,p3,x);
puts(p3);
} #include<stdio.h>
#include<string.h>
void add(char a[], char b[], char c[], int n)
{
int i, k;
c = '\0'; k = 0;
for (i = n - 1;i >= 0;i--)
{
c = (a - '0') + (b - '0') + k; // 将字符型数字转换为整型数字进行运算
k = c / 10; // 取进位(大于10就有进位)
c = c % 10 + '0'; // 将整型数字转换为字符型数字存入c
}
if (k)
{
for (i = n + 1;i > 0;i--)
c = c;
c = k + '0';
}
} // 少了一个花括号
int main()
{
char p1 = "1000000001", p2 = "900000009", p3;
int i, x = strlen(p1), y = strlen(p2);
if (x < y)
{
for (i = x;i >= 0;i--)
{
p1 = p1;
p1 = '0'; // p1的数住后移了,该位上的数置'0',确保最前面没有数的位是0
}
x = y;
}
if (x > y)
for (i = y;i >= 0;i--)
{
p2 = p2;
p2 = '0';
}
add(p1, p2, p3, x);
puts(p3);
} 本帖最后由 jackz007 于 2021-1-8 09:08 编辑
#include <stdio.h>
#include <string.h>
char * reverse(char s[])
{
char c ;
int i , n ;
for(n = 0 ; s ; n ++) ;
for(i = 0 ; i < n / 2 ; i ++) {
c = s ;
s = s ;
s = c ;
}
return s ;
}
char * add(char c[] , char a[] , char b[])
{
int d , e , i , j ;
reverse(a) ;
reverse(b) ;
c = '\0' ;
for(d = e = i = j = 0 ; a || b ; d ++) {
c = 0 ;
if(e) c ++ ;
e = 0 ;
if(a) {
c = c + a - '0';
i ++ ;
}
if(b) {
c = c + b - '0';
j ++ ;
}
if(c > 9) {
c -= 10 ;
e = 1 ;
}
c += '0' ;
}
if(e) c = '1' ;
c = '\0' ;
reverse(a) ;
reverse(b) ;
reverse(c) ;
return c ;
}
int main(void)
{
char p1="1000000001" , p2 = "9000000009" , p3 ;
printf("%s\n" , add(p3 , p1 , p2)) ;
strcpy(p1 , "999999999999999999999999999999999999999999") ;
strcpy(p2 , "9") ;
printf("%s\n" , add(p3 , p1 , p2)) ;
}
编译、运行实况
D:\00.Excise\C>g++ -o add add.c
D:\00.Excise\C>add
10000000010
1000000000000000000000000000000000000000008 jackz007 发表于 2021-1-8 01:09
编译、运行实况
本渣表示没看懂{:5_99:} 肚子饿了233 发表于 2021-1-8 16:36
本渣表示没看懂
我大概能给你解释下‘0’这个
页:
[1]