肚子饿了233 发表于 2021-1-7 22:59:09

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);
}

风过无痕1989 发表于 2021-1-8 01:01:01

#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 01:09:34

本帖最后由 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

肚子饿了233 发表于 2021-1-8 16:36:17

jackz007 发表于 2021-1-8 01:09
编译、运行实况

本渣表示没看懂{:5_99:}

心驰神往 发表于 2021-1-8 16:49:22

肚子饿了233 发表于 2021-1-8 16:36
本渣表示没看懂

我大概能给你解释下‘0’这个
页: [1]
查看完整版本: C语言!