题目来源和说明

题目来源于王道考研,题目链接如下:

https://www.nowcoder.com/questionTerminal/8c3c5dae2c4a4266ba04f993a18e286b

题目描述

读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

样例

输入
1 2 1
11 21 1
108 8 2
36 64 3
0 0 1
输出
3
-1
-1
100

简要分析

这个题目我们依次取出倒数第K个数字即可,如果不相等,则直接退出不再进行判断,返回a+b就行

C++ 代码

#include<iostream>
using namespace std;

int main() {
    int a,b,k;
    while(scanf("%d%d%d",&a,&b,&k)!=EOF&&a!=0&&b!=0) {
        int ret=-1;
        int tempa=a;
        int tempb=b;
        while(k--) {
            if(a%10!=b%10) {
                ret=tempa+tempb;
                break;
            }
            a/=10;b/=10;
        }
        printf("%d\n",ret);
    }
    return 0;
}

同类题目

  1. 守形数

https://www.nowcoder.com/questionTerminal/99e403f8342b4d0e82f1c1395ba62d7b

C++代码

#include<iostream>

using namespace std;

int main() {
    int a;
    while(scanf("%d",&a)!=EOF) {
        int b=a*a;
        while(a) {
            if(a%10!=b%10) {
                printf("No!\n");
                break;
            }
            a/=10;b/=10;
        }
        if(a==0) printf("Yes!\n");
    }
    return 0;
}

  1. 特殊乘法

https://www.nowcoder.com/questionTerminal/a5edebf0622045468436c74c3a34240f?toCommentId=12462195

C++代码

#include<iostream>

int buf1[15],buf2[20];
int size1=0,size2=0;
using namespace std;

int main() {
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF) {
        size1=0;size2=0;
        int ans=0;
        while(a!=0) {
            buf1[size1++]=a%10;
            a=a/10;
        }
        while(b!=0) {
            buf2[size2++]=b%10;
            b=b/10;
        }
        for(int i=0;i<size1;i++) {
            for(int j=0;j<size2;j++) {
                ans+=buf1[i]*buf2[j];
            }
        }
        printf("%d\n",ans);
    }
}



  1. 反序数

https://www.nowcoder.com/questionTerminal/e0d06e79efa44785be5b2ec6e66ba898?toCommentId=12462344

C++代码

#include<iostream>

using namespace std;

int main() {
    for(int i=1000;i<=1111;i++) {
        int a=i;
        int b=0;
        while(a) {
            b=b*10+a%10;
            a/=10;
        }
        if(b==i*9) {
            printf("%d\n",i);
        }
    }
    return 0;
}

  1. 对称平方数

https://www.nowcoder.com/questionTerminal/1b79865e2f534db0adba84dca10d6bae

C++代码

#include<iostream>
using namespace std;

bool isret(int a) {
    int temp[20];
    int idx=0;
    do{
        temp[idx++]=a%10;
        a=a/10;
    }while(a!=0);
    int i=0;
    int j=idx-1;
    for(;i<=j;i++,j--) {
        if(temp[i]!=temp[j]) {
            return false;
        }
    }
    return true;
}
int main() {
    for(int i=1;i<256;i++) {
        if(isret(i*i)) {
            printf("%d\n",i);
        }
    }
    return 0;
}

  1. Digital Root

https://www.nowcoder.com/questionTerminal/cef727d0af33479c9fb4a9c120702414

C++代码

#include<iostream>
using namespace std;

int digitRoot(int a) {
    int res=0;
    do{
        res+=a%10;
        a/=10;
    }while(a!=0);
    if(res>9) return digitRoot(res);
    else return res;
}
int main() {
    int a;
    while(scanf("%d",&a)!=EOF) {
        printf("%d\n",digitRoot(a));
    }
    return 0;
}