poj3982--大数加法C和Java实现

poj3982--大数加法C和Java实现
不多解释,详情参阅我的相关文章。
Add()的两个参数都是逆序的整数数组,结果存在num1中。
以下是本题代码:

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define LEN 1000
int Max(int a, int b)
{
    
if(a > b)
        
return a;
    
return b;
}
void Add(char *num1, char *num2)
{
    
int len1, len2;
    
int i, j;
    i 
= LEN;
    
while(num1[--i] == 0 && i > 0);
    len1 
= i;
    i 
= LEN;
    
while(num2[--i] == 0 && i > 0);
    len2 
= i;
    
int lenm = Max(len1, len2);
    
for(i = 0; i <= lenm; i++)//add
        num1[i] += num2[i];
    
int t = 0;
    
int t2;
    
for(i = 0; i <= lenm + 2; i++)//carry bit
    {
        t2 
= num1[i] + t;
        num1[i] 
= t2 % 10;
        t 
= t2 / 10;
    }
}
void ToAr(char *A, int n)
{
    
int i, j;
    i 
= 0;
    
while(n)
    {
        A[i
++= n % 10;
        n 
/= 10;
    }
}
void Copy(char *t, char *f)
{
    
for(int i = 0; i < LEN; i++)
        t[i] 
= f[i];
}
int main()
{
    
int i, j;
    
char A0[LEN], A1[LEN], A2[LEN], A3[LEN];
    
char str[LEN];
    
while(gets(str) != NULL)
    {
        memset(A0, 
0sizeof(A0));
        memset(A1, 
0sizeof(A0));
        memset(A2, 
0sizeof(A0));
        memset(A3, 
0sizeof(A0));
        
int a0, a1, a2;
        sscanf(str, 
"%d%d%d"&a0, &a1, &a2);
        ToAr(A0, a0);
        ToAr(A1, a1);
        ToAr(A2, a2);
        
for(j = 1; j <= 97; j++)
        {
            Add(A0, A1);
            Add(A0, A2);
            Copy(A3, A0);
            Copy(A0, A1);
            Copy(A1, A2);
            Copy(A2, A3);
        }
        i 
= LEN;
        
while(A3[--i] == 0 && i > 0);
        
if(i == 0)
            printf(
"0\n");
        
else
        {
            
for(; i >= 0; i--)
                printf(
"%d", A3[i]);
            putchar(
10);
        }
    }
    
//system("pause");
}

下面是java代码:

import java.math.*;
import java.util.*;
public class Main {
    
public static void main(String[] args) {
        Scanner sc 
= new Scanner(System.in);
        
try
        
{
            
while(true)
            
{
                BigInteger b1, b2, b3, b4; 
                b1 
= sc.nextBigInteger();
                b2 
= sc.nextBigInteger();
                b3 
= sc.nextBigInteger();
                b4 
= new BigInteger("0");
                
for(int i = 0; i <= 96; i++)
                
{
                    b1 
= b1.add(b2);
                    b1 
= b1.add(b3);
                    b4 
= b1;
                    b1 
= b2;
                    b2 
= b3; 
                    b3 
= b4;
                }

                System.out.println(b4);
            }

        }
catch(Exception e){};
        
    }


}



你可能感兴趣的:(poj3982--大数加法C和Java实现)