zoukankan      html  css  js  c++  java
  • 牛客小白月赛22-J 计算A+B(大整数加法)

    链接:https://ac.nowcoder.com/acm/problem/202511
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    在一行中给出一个字符串,请判断是否满足A + B格式,如果满足,输出计算结果,否则输出"skipped"。
    此处A,B均为大于等于0的整数,不保证数据没有前导零。

    输入描述:

    第一行输入一个n, 1 ≤ n < 1000n,1≤n≤1000,代表测试数据的组数。
    接下来n行,每行输入一个长度不超过10000的字符串。

    输出描述:

    对于每组输入,输出结果

    示例1

    输入
    4
    2+2
    1+2
    +12
    0+0
    输出
    4
    3
    skipped
    0
    这道题是牛客月赛的题,题意非常好理解,判断输入的字符串是否满足A+B的格式,如果符合的话输出结果,如果不符合输出“skipped”,考虑到字符串是10000位的,所以用到大整数加法,思路是先定义n,然后进入while循环,输入我们的字符串,这里用一个flag来存储加号的位置,如果找不到加号说明不符合题意,直接输出skipped,如果能找到加号,则通过加号把字符串一分为二,然后得到的这两个数相加,当然,如果其中有一个字符串为空,也就是+12或12+这种格式,说明不符合题意,也应该输出skipped,记得判断一下,分好字符串以后进行大整数加法,因为没有前导零这种情况,所以我们不用考虑。贴AC代码

    #include <bits/stdc++.h>
    using namespace std;
    const int _max=1e4+50;
    int main()
    {
    	int n;
    	cin>>n;
    	string f(string,string);
    	while(n--)
    	{
    		string s;
    		cin>>s;
    		int flag=-1;//找加号的位置
    		for(int i=0;i<s.length();i++)
    		  if(s[i]=='+')
    		  {
    		  	flag=i;
    		  	break;
    		  }
    		if(flag==-1)//找不到加号说明不符合题意
    		{
    			cout<<"skipped"<<endl;
    			continue;
    		}
    		string a="",b="";//一分为二的字符串
    		a=s.substr(0,flag);//加号之前的
    		b=s.substr(flag+1,s.length());//加号之后的
    		if(a.empty()||b.empty())//判断一下字符串是否为空串
    		{
    			cout<<"skipped"<<endl;
    			continue;
    		}
    		cout<<f(a,b)<<endl;//大整数加法
    	}
    	return 0;
    }
    string f(string a,string b)
    {
    	int c1,c2;
    	c1=a.length();
    	c2=b.length();
    	if(c1>c2)//先在前端补0让两个串一样长
    	{
    		for(int i=c2;i<c1;i++)
    		  b='0'+b;
    	}
    	else
    	{
    		for(int i=c1;i<c2;i++)
    		  a='0'+a;
    	}
    	string ans="";//存放答案
    	int s,v=0;//s表示当前位,v表示应该进的位
    	int c=a.length();
    	for(int i=c-1;i>=0;i--)//从后往前计算
    	{
    		s=a[i]-'0'+b[i]-'0'+v;
    		v=s/10;//计算要进的位
    		s%=10;//当前位应该小于10
    		ans=char(s+'0')+ans;//从后往前加
    	}
    	if(v!=0)//最后判断一下要不要进位
    	  ans=char(v+'0')+ans;
    	return ans;  
    }
    
  • 相关阅读:
    Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图
    大数据应用:五大地区喜新厌旧游戏APP类别之比较与分析
    Big Data應用:以"玩家意見"之數據分析來探討何謂"健康型線上遊戲"(上)
    Example:PanGu分詞系統-批次匯入新詞
    C#数据类型02--结构
    C#数据类型01--数组
    C#基础知识点
    陌生Layout属性
    LinearLayout(线性布局)
    Android--入门常识
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294331.html
Copyright © 2011-2022 走看看