要求说明:一个两位正整数,将他的个位和十位对调,得到另一个两位正整数,我们称这两个正整数互为对调数。现给定一个两位正整数,问能否找出另一个对调后不同的两位正整数,使得这两个正整数之和等于他们各自对调数之和?例如:63+47=36+74,。编写程序为输入的一个两位数这哦到满足如上要求的数或输出“不存在”。
//对掉数问题
#include <stdio.h>
int main(int argc, char **argv)
{
int x,y,z,x1,y1,z1,i,k,n;
int flag = 0; // 标志位
while(1)
{
printf("please input an integer\n");
scanf("%d",&n); //输入n值
if(n <= 10 || n >= 100) //当n小于等于10或大于等于100时输出错误
{
printf("data error!\n");
continue; //跳出本次循环
}
else if(n %10 == 0) //当n个位数是0时,输出错误
{
printf("data error!\n");
continue; //跳出本次循环
}
else
{ //数据转换,x十位y个位z对调数
x = n/10;
y = n%10;
z = 10 * y + x;
break; //跳出循环
}
}
for( i = 11; i < 100; i ++) //遍历两位数
{
if(i % 10 == 0) //个位数是0,跳出本次循环
continue;
else
{
x1 = i /10 ; //数据转换x1十位数y1个位数z1对调数
y1 = i%10;
z1 = 10 *y1 + x1;
if( n + i == z + z1 && n != z1) //判断题目条件,n、i之和与各自对调数之和是否相等且n、i不互为对调数
{
printf("%d + %d = %d +%d\n",n,i,z,z1);//要求格式输出
flag = 1; //修改标志位
}
else
continue; //否则结束本次循环
}
}
if( flag == 0) //判断标志位是否改变
{
printf("inexistince\n"); //未改变,则无输出,输出不存在
}
return 0;
}
样例输入输出:
65
65 + 12 = 56 +21
65 + 23 = 56 +32
65 + 34 = 56 +43
65 + 45 = 56 +54
65 + 67 = 56 +76
65 + 78 = 56 +87
65 + 89 = 56 +98