今天看了两个大数处理的程序,一个是用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; } |
原文:http://www.cnblogs.com/scottding/p/3661402.html