首页 > 其他 > 详细

大数处理问题

时间:2014-04-13 01:29:30      阅读:338      评论:0      收藏:0      [点我收藏+]

今天看了两个大数处理的程序,一个是用JAVA 写的,一个是用C写的,处理的确实是挺方便的,虽然现在还没有学JAVA,但看起来感觉很强大,下面把JAVA 代码贴出来,学习一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.math.BigInteger;
import java.util.Scanner;
 
class Main {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        BigInteger zero = BigInteger.valueOf(0);
        BigInteger sum = BigInteger.valueOf(0);
        for(;;) {
            BigInteger b = s.nextBigInteger();
            if(b.equals(zero)) break;
            sum = sum.add(b);
        }
        System.out.println(sum.toString());
    }
}

 短短几行就把这个问题解决了;

下面介绍一下如何使用C来解决大数问题:

大数长度最长为 L ;

定义一个字符数组  s[ L ] ;

定义一个整形数组 a[ L ] ;

定义一个求和的数组 sum[ L ] ;

输入大数到 字符数组 S 中 ,从 S 的最后一个字符开始 把 S[ len - 1 ] - ‘0‘ 赋值给 a[ 0 ] ,这样循环下去,使得S中的字符变成整型,并倒续存入整型数组a中,让a中的每个数值与相应的sum中的每个字符相加,和存入sum中;

对sum进行处理,sum[k+1] += sum[k] / 10 ;    sum[k] = sum[k] % 10 ;

倒续输出sum中的数值(前序为0的除外)

详细代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
   
char s[110]; 
int  sum[110]; 
   
int main() 
    memset( sum, 0, sizeof(sum) ); 
    while ( scanf("%s",&s) && strcmp(s,"0") ) { 
        int a[106] = {0} ;
        int l = strlen(s); 
        for ( int i = 0 ; i < l ; ++ i ) 
            a[i] = s[l-1-i]-‘0‘;
        for ( int i = 0 ; i < 106 ; ++ i ) 
            sum[i] += a[i]; 
        for ( int i = 0 ; i < 106 ; ++ i ) { 
            sum[i+1] += sum[i]/10; 
            sum[i] %= 10; 
        }  
    
    int end = 105; 
    while ( end >= 1 && !sum[end] ) end --; 
    while ( end >= 0 ) printf("%d",sum[end --]); 
    printf("\n"); 
    return 0; 

 

 

大数处理问题,布布扣,bubuko.com

大数处理问题

原文:http://www.cnblogs.com/scottding/p/3661402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!