【算法】GOJ 1053 还是A+B

1053也是一道简单题,用整形数组也是可以做出来的。不过我主要用它来熟悉C++ string库函数的一些用法。
1053题目:
还是A+B
Problem Description:
读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,(位数不足前导补0)请直接输出-1。
Input:
测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
Output:
对每个测试用例输出1行,即A+B的值或者是-1。
Sample Input:
1 2 1
11 21 1
108 8 2
36 64 3
0 0 1
Sample Output:
3
-1
-1
100

主要用到的string中的函数有:
1.获取string的长度,可以用str.size()str.length().(注意两者返回的是unsign int ,它比int 高级。 unsign int 类型与int 类型的运算该强制转换就强制转换,以避免不必要的错误,比如unsign i=5;cout<<(i-6)%7 << endl;//结果为3。

/#不建议使用strlen(char * )来获取string 的长度,因为strlen接受的参数是char *,需要先将string转换成char数组,即strlen(str.c_str()),c_str()是其一个成员函数,表示将string转换成char数组,这样有点多此一举#/

2.string类的构造函数。这里就只先介绍本题用到的(以后遇到相应的题目,再进行补充): string str(size_type n,char c)。说明:创建一个包含n个元素的string对象str,其中每个元素都被初始化为字符c。

3.string类的插入操作函数。同样insert函数具有不同的重载函数。这里同样只介绍本题用到的: s.insert(pos, str),将str的拷贝插入到s的pos位置,返回s;注意是返回s,也就是s本身已经发生了变化

4.string类的复制操作。本题使用了str.substr(pos, n)。函数说明:返回str中从pos(默认为0)开始的,有n个字符组成的s的子串的拷贝;注意返回的string 类型,str本身不发生变化。

5.int与string的相互转换。这里暂且只先介绍string转int。
方法一:
使用C语言< stdlib.h>中的*atoi(str.c_str())函数,需要先将string类型转为char 数组指针。
方法二:
使用C++11中的
stoi(str)**函数,比如 int a=stoi(str); stoi可以转换为十进制、八进制、十六进制和二进制数字,不过在codeblocks上,我选择C++11标准编译器却编译错误,好像只能用VS了。

6.string的compare的使用,这里先介绍简单比较两个字符串是否相等。str1.compare(str2),返回值为正、0、负。0代表相等。
(不足之处,欢迎大家补充!)

AC代码:

#include<iostream>
#include<string>
#include<stdlib.h>//atoi函数
using namespace std;
void Changefun(string &str,int k)
{//处理函数
     if(str.size()<k)
        {
            int len=k-str.size();
            string N_B(len,'0');
            str.insert(0, N_B);
        }
}
int main()
{
    string A;
    string B;
    int k;
    while(cin>>A>>B>>k)
    {
        if(A=="0"&&B=="0")
            break;
        //是否需要补充位数
        Changefun(B,k);
        Changefun(A,k);
        //比较
        if(((A.substr(A.size()-k,k)).compare(B.substr(B.size()-k,k)))==0)
            cout<<-1<<endl;
        else
        {//转换为int类型
            int numA = atoi(A.c_str());
            int numB = atoi(B.c_str());
            cout<<numA+numB<<endl;
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,代码仅用于交流和学习!转载请注明出处!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值