题目描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入格式
一个正整数 n (10< n< 100), 表示要求满足的数位和。
输出格式
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
样例输入
复制
44
样例输出
复制
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
解题思路:
我们使用一个全局变量来计数,全局变量初始化为0
需要写两个函数,第一个函数是将数字拆开,用一个数组保存,调用函数二。
第二个函数是判断一个数是不是回文数并且是否满足各个位数的和是否等于正整数n,如果条件均满足就输出这个数,并计数。
在main函数中使用for循环调用函数一,把满足条件的输出。
如果没有输出,即全局变量c为0。就输出-1。
具体代码如下
#include<stdio.h>
int c=0;//全局变量c
void judge2(int i,int a[6],int b)
{
if(a[5]==0)//如果为5位数
{
if(a[0]==a[4]&&a[1]==a[3]&&(a[0]+a[1]+a[2]+a[3]+a[4]==b))//判断是否满足条件
{printf("%d\n",i);c++;
}
}
else
if(a[0]==a[5]&&a[1]==a[4]&&a[2]==a[3]&&(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]==b))//如果为6位数,判断是否满足条件
{printf("%d\n",i);c++;
}
}
int judge1(int i,int b)
{
int a[6];
a[0]=i%10;//个位
a[1]=i/10%10;//十位数
a[2]=i/100%10;//百位数
a[3]=i/1000%10;//千位
a[4]=i/10000%10;//万位
if(i>9999&&i<1000000)//是否为6位数
a[5]=i/100000%10;//十万位
else
a[5]=0;
judge2(i,a,b); //调用函数
}
int main()
{
int a;
scanf("%d",&a);
int i;
for(i=10000;i<1000000;i++)
judge1(i,a);
if(c==0)//如果没有输出,就输出-1。
printf("-1") ;
return 0;
}
0.0分
1 人评分
C语言训练-求函数值 (C语言代码)浏览:594 |
本人酷爱递归实现很多问题,这里也是浏览:592 |
WU-判定字符位置 (C++代码)浏览:1467 |
【求[X,Y]内被除3余1并且被除5余3的整数的和】 (C语言代码)浏览:698 |
1908题解浏览:677 |
数列排序 (C语言代码)浏览:670 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:707 |
C语言训练-字符串正反连接 (C语言代码)浏览:651 |
1202题解浏览:685 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:545 |