`
netalpha
  • 浏览: 81724 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

杰哥私房题──大数相加

J# 
阅读更多

问题描述
求两个不超过200 位的非负整数的和。
输入数据
有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。
输出要求
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能
输出为0342。
输入样例
22222222222222222222
33333333333333333333
输出样例
Output Sample:
55555555555555555555

 

#include <stdio.h>
#include <string.h>

int main(){
	char cNum1[201];
	char cNum2[202];
	int iNum1[201];
	int iNum2[201];
	scanf("%s", cNum1);
	scanf("%s", cNum2);
	memset(iNum1, 0, sizeof(iNum1));
	memset(iNum2, 0, sizeof(iNum2));
	int i, j = 0;
	for(i = strlen(cNum1) - 1; i >= 0; i--){
		iNum1[j] = cNum1[i] - '0';	
		j++;
	}
	j = 0;
	for(i = strlen(cNum2) - 1; i >= 0; i--){
		iNum2[j] = cNum2[i] - '0';
		j++;
	}
	int k = strlen(cNum1);
	if(strlen(cNum2) > strlen(cNum1))
		k = strlen(cNum2);
	for(i = 0; i < k; i ++){
		if(iNum1[i] + iNum2[i] > 9){
			iNum1[i] = iNum1[i] + iNum2[i] - 10;
			iNum1[i + 1] += 1;
		}
		else
			iNum1[i] = iNum1[i] + iNum2[i];
	}
	for(i = k; i >= 0; i--){
		if(iNum1[i] == 0)
			i--;
		printf("%d", iNum1[i]);
	}
	printf("\n");
	return 0;
}
 

 

 

3
3
分享到:
评论
4 楼 leeldy 2009-05-25  
package com.test.suanfa;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BigAdd {
	
	public static void main(String[] agrs) throws IOException{
		String str;
		BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
		System.out.print("Input Number-1:");
		str=reader.readLine();
		while(str.length()>0){
			//数字1
			char[] num1=str.toCharArray();
			System.out.print("Input Number-2:");
			str=reader.readLine();
			//数字2
			char[] num2=str.toCharArray();
			//进位
			int flag=0;
			char[] longer=num1.length>num2.length?num1:num2;
			char[] shorter=num1.length>num2.length?num2:num1;
			//临时变量
			int temp;
			for(int k=0;k<longer.length;k++){
				temp=flag;
				//较长数组的下标
				int i=longer.length-1-k;
				//较短数组的下标
				int j=shorter.length-1-k;
				temp+=longer[i]-'0';
				if(j>=0){
					temp+=shorter[j]-'0';
				}
				if(temp>=10){
					temp-=10;
					flag=1;
				}else{
					flag=0;
				}
				longer[i]=(char)(temp+'0');
			}
			
			System.out.println("Output:");			
			if(flag>0){
				System.out.print("1");
			}
			System.out.println(longer);
			
			System.out.print("Input Number-1:");
			str=reader.readLine();
		}
		
	}

}



这个大整数加法不知道能支持多少位。。。
3 楼 dengdaiyemanren 2009-04-01  
 if(iNum1[i] + iNum2[i] > 9){  
             iNum1[i] = iNum1[i] + iNum2[i] - 10;  
            iNum1[i + 1] += 1;  
        }  

这行代码有问题吧,我测试这个
999
12
=111
2 楼 netalpha 2009-03-16  
java 代码10行就能搞定了  用bigInteger就行
liujunsong 写道

看看我写的java代码,调试通过.


1 楼 liujunsong 2009-03-14  
看看我写的java代码,调试通过.
package com.liu;

public class MyCompute {
    //按数量得到多个0的组合
    private static String dspace(int i){
         String sret ="";
         int id =0;
         for(id=0;id<i;id++){
             sret = "0"+ sret;
         }
         return sret; 
    }

    public static void main(String[] args){
        String s1 = args[0];
        String s2 = args[1];
        //异常处理没有加
         if (s1.length()<200){
            s1 = dspace(200 - s1.length()) + s1;
        }
        if (s2.length()<200){
            s2 = dspace(200 - s2.length()) + s2;
        }
         String sret =""; //结果字符串
         int i =0;
        int addflag =0;  //进位标志
         String stemp;
        for(i=200-1;i>=0;i--){
            int i1 = 0;
            int i2 = 0;
            i1 = Integer.parseInt(s1.substring(i,i+1));
            i2 = Integer.parseInt(s2.substring(i,i+1));
            if (i1+i2+addflag >=10){
            stemp = new Integer(i1 + i2 + addflag - 10).toString); 
//进位
                addflag = 1;
            }else{
             stemp = new Integer(i1 + i2 + addflag).toString(); 
//不进位
                addflag = 0;
            }
            sret = stemp + sret;
         }
         
         for(i=0;i<sret.length();i++){
             if (! sret.substring(i,i+1).equals("0")){
                  break;
             }
         }
         sret = sret.substring(i);
         System.out.println("result is:"+sret);
     }
}

相关推荐

Global site tag (gtag.js) - Google Analytics