GOJ 1053

来源:互联网 发布:淘宝规则有哪些 编辑:程序博客网 时间:2024/06/05 04:47

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;}

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

原创粉丝点击