zoukankan      html  css  js  c++  java
  • HDOJ 1002 A + B Problem II

    题目描述

    我有一个非常简单的问题要问你。给定两个整数A和B,你要做的就是计算A + B的和。

    input

    输入的第一行包含整数T(1 <= T <= 20),表示测试用例的数量。 然后是T行,每行包含两个正整数,A和B.请注意,整数非常大,这意味着您不应该使用32位整数来处理它们。 您可以假设每个整数的长度不超过1000

    output

    对于每个测试用例,您应输出两行。 第一行是“Case#:”,#表示测试用例的编号。 第二行是方程“A + B = Sum”,Sum表示A + B的结果。注意方程中有一些空格。 在两个测试用例之间输出一个空行。

    思路分析

    这是一个大数问题,输入的值不能用常见的int long 等来表示,因此考虑字符数组存储然后逐位相加
    重点在于:进位 本位数字为 (a+b+前一位进位)%10 进位为 (a+b+前一位进位)/10
    最后要注意输出的格式,最后一个输出后不用换行

    源代码

    #include<iostream>
    #include<cstring>
    using namespace std;
    char a[1010],b[1010],c[1010],d[1010];
    int main()
    {
        int n,len,count=0;
        cin>>n;
        while(n--){
            count+=1;
            cin>>a>>b;
            int len1 = strlen(a);
            int len2 = strlen(b);
            int t1=0;
            //将a串反转
            for(int i=len1-1;i>=0;i--){
                c[t1] = a[i];
                ++t1;
            }
            t1=0;
            //将b串反转
            for(int i=len2-1;i>=0;i--){
                d[t1] = b[i];
                ++t1;
            }
            //补位
            if(len1>len2){
                len = len1;
                for(int i=len2;i<len1;i++)
                {
                    d[i] = '0';
                }
            }else{
                len = len2;
                for(int i=len1;i<len2;i++)
                {
                    c[i] = '0';
                }
            }
            //逐个相加
            int a1,b1,t=0;
            for(int i=0;i<len;i++){
                a1 = c[i]-'0';
                b1 = d[i]-'0';
                d[i] = (a1+b1+t)%10+'0';//本位
                t = (a1+b1+t)/10;//进位
            }
    	cout<<"Case "<<count<<":"<<endl;
            cout<<a<<" "<<"+ "<<b<<" = ";
            //输出 这里判断一下最高位是否需要进位,是则给最高位赋值进位,否不用管
            if(t!=0){
                d[len]=t+'0';
            }
    	for(int i=len-1;i>=0;i--)
                cout<<d[i];
            if(n!=0)
                cout<<endl<<endl;
            else
                cout<<endl;
        }
    }
    
  • 相关阅读:
    面向对象设计模式之Facade外观模式(结构型)
    Android 多线程:使用Thread和Handler
    Android源码分析之Handler
    Android View的几个位置坐标关系
    LinearLayout布局问题
    Android app被系统kill的场景
    改变Activity启动时的默认动画
    ViewStub源码分析
    Android measure过程分析
    点击ViewGroup时其子控件也变成pressed状态的原因分析及解决办法
  • 原文地址:https://www.cnblogs.com/xp-thebest/p/14016457.html
Copyright © 2011-2022 走看看