请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

 1 #include <iostream>
 2 #include <string>
 3 #include<algorithm>
 4 using namespace std;
 5 int main(){
 6     string str1;
 7     string str2;
 8     while(cin>>str1>>str2){
 9         int size1 = str1.size()-1;
10         int size2 = str2.size()-1;
11         int flag = 0;
12         for(int i=0;i<=size1;i++){
13             if(!(str1[i]>=‘0‘ && str1[i] <= ‘9‘)){
14                 cout<<"error"<<endl;
15                 flag = 1;
16                 break;
17             }
18         }
19         if(flag) break;
20         for(int i=0;i<=size2;i++){
21              if(!(str2[i]>=‘0‘ && str2[i] <= ‘9‘)){
22                 cout<<"error"<<endl;
23                  flag = 1;
24                 break;
25             }
26         }
27         if(flag) break;
28         string sum;
29         int carry = 0;
30         int j = 0;
31         while(size1>=0 && size2>=0){
32             int nsum = (str1[size1] - ‘0‘) + (str2[size2] - ‘0‘) + carry;
33             carry = nsum/10;
34             nsum = nsum%10;
35             sum += to_string(nsum);
36             size1--;
37             size2--;
38         }
39         while(size1 >= 0){
40             int nsum = (str1[size1] - ‘0‘) + carry;
41             carry = nsum/10;
42             nsum = nsum%10;
43             sum += to_string(nsum);
44             size1--;
45         }
46         while(size2 >= 0){
47             int nsum = (str2[size2] - ‘0‘) + carry;
48             carry = nsum/10;
49             nsum = nsum%10;
50             sum += to_string(nsum);
51             size2--;
52         }
53         if(carry){
54             sum += ‘1‘;
55         }
56         reverse(sum.begin(),sum.end());
57         cout<<sum<<endl;
58     }
59 }

原文地址:https://www.cnblogs.com/haley0125/p/8505872.html

时间: 2024-08-10 00:09:18

请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error的相关文章

A、B两个整数集合,设计一个算法求他们的交集

代码留作记录,本人水平有限,看了别人的解法真是自愧不如. 关于此题的详细探讨可以参考:http://blog.csdn.net/thebestdavid/article/details/12056293 /*A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效.*/ #include <iostream> #include <cstring> #include <set> #define M 8 #define N 5 using namespace std; i

剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数

题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 在做这道题的时候我最先考虑的是每次比较对角线上的元素可能可以取得较好的效果, 以查找9为例, 从1(0,0)开始,1<10,可以得出结论,10在1的右侧或下侧: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 然后看4(1,1),4<9, 1 2 8 9 2

请写一个算法,用于将list集合内重复元素剔除

package Homework; import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Scanner;/** * list集合是否可以包含重复元素? * 如果可以,请写一个算法,用于将list集合内重复元素剔除. * @author 张致远 * */public class Homework2 { public static void main(String[]

请定义一个宏,比较两个数的a、b的大小,不能使用大于、小于、if语句(转载)

笔试的时候经常问这些: 方法一: #define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a)) 若a>b,则a-b的二进制最高位为0,与上任何数还是0,所以大数为a: 否则,a-b为负数,最高位为1,与上0x80000000(最高位为1其他为0)之后为1,所以此时最大数为b. 方法二: #define max(a,b) ((((a)-(b))&(1<<31))?(b):(a)) 方法三:      1.#define 

请设计一个有参装饰器decorator,它可作用于任何函数上

最近有小伙伴面试,遇到一个很有意思的题:请设计一个有参装饰器decorator,它可作用于任何函数上,要求可以接受一个int作为参数,该参数为要求的执行秒数,如果该函数的执行时间大于规定的执行秒数,请打印改函数名字和执行时间. 这个题我之前面试的也遇到过,当时用高阶函数的方式实现,现在又遇到了,废话少说,咱们开发. 先来分析下: 1 有参数的装饰器 --> 高阶函数 2 执行时间 --> time 库 上代码: from functools import wraps import time #

设计一个算法将一个顺序表逆置

#include<iostream> #include<malloc.h> using namespace std; typedef struct { int length;//保存长度 int data[40];//数组 } SqList; /*算法1:设计一个高效的算法,将顺序表中的所有元素逆置.要求算法空间股咋度为o(1)*/ //初始化顺序表 void initReverse(SqList &s,int *a,int l){ s.length=0; //插入元素 f

设计一个算法求节点值为x和节点y值得两个节点的最近共同祖先

思想:采用非递归后序遍历二叉树b.当找到节点值为x的节点时将栈中所有节点值存放在anorx数组中(如图所示的二叉树,F节点的anorx为"ACF"),当找到节点值为y的节点时将栈中所有节点值存放在anory数组中(对于如图所示的二叉树,E节点的anory为"ACE"),当两个节点均已找到后,通过比较找到他们最近的公共祖先(对于如图所示的二叉树,F和E节点的最近公共祖先为C),对应的算法如下: int commancestor(BTNode *b,ElementTyp

A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)

#include<iostream> using namespace std; /* 1)先使用快速排序,使得两个数组有序: 2)然后利用二分查找的方法,在数组B中查找: 3)其中,注意在数组B中,使用二分查找的起点,是根据上次查找的结果开确定的:这样可以进一步提高速度: */ int Sort(int array[],int low,int high) { int temp=array[low]; int pos=low; while(low<high) { while(array[h

设计一个算法,输出从每个叶子节点到根节点的逆路径

下面使用三种遍历方法输出逆路径,假设二叉树采用二叉链存储结构存储. 方法1:采用基于层次遍历的方法,设计的队列为非环形顺序队列,将所有已扫描的节点指针进队,并在队列中保存双亲节点的位置.当找到一个叶子节点时,在队列中通过双亲节点的位置输出该叶子节点到根节点的逆路径.对应的算法如下: void AllPath(BTNode * b) { struct snode { BTNode *node; //存放当前节点指针 int parent; //存放双亲节点在队列中的位置 } Qu[MaxSize]