求大佬帮帮小白解决这道C语言题

weixin_44953849 2019-05-12 10:14:28
3. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N 下面是我写的 #include<stdio.h> #include<math.h> void main() { int m,n,i,p; n=0,i=0,m=1000; while(m<=9999) { p=m; while(m!=0) { n=n*10+m%10; m=m/10; } if(9*p==n) { printf("%d",p); } i++; m=p+i; } } 但程序运行不了,没有任何显示,可以告诉我哪里错了吗
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这种小运算量在现代计算机上测不出来语言的效率,即便解释性语言,比如DOS中带的QBasic,也是秒出结果
ebhb111 2019-05-15
  • 打赏
  • 举报
回复
再引申一下,如何求给定倍数的反序数,这样来测试一个语言的效率,比如求一个数的6倍,是他的反序数,求10万以内的,或求100万以内的。
  • 打赏
  • 举报
回复
因为四位数乘以9仍然是四位数,所以该数最大为1111,简单优化一下:
for (int i = 1000; i < 1112; i++)
if (i * 9 == i / 1000 + i % 1000 / 100 * 10 + i % 100 / 10 * 100 + i % 10 * 1000)
printf("%d\n", i);
CaptainXue 2019-05-13
  • 打赏
  • 举报
回复
主要问题在于:循环体内逻辑的问题,变量的变化,这种最好通过输出中间结果来发现问题在什么地方,可以多学学基础知识,也可以看看我的文章,修改后的代码如下,错误之处表明了的:

#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
main(void ) {
int m,n,i,p;
n,i=0,m=1000;
while(m<=9999) {
p=m;
n=0;//注意n在每一次循环的开始初始化
while(m!=0) {
n=n*10+m%10;
m=m/10;
}
if(9*p==n) {
printf("%d\n",p);
}
//i++;这里的i是按照1,2,3,4递增,这样导致p的值是1000,1001,1003,所以这种写法不对
//m=p+i;
p++;
m=p;
}
}
hongss 2019-05-13
  • 打赏
  • 举报
回复
	int m,n,p;
	m=1000;
	while( m <= 9999 )
	{
		p = m * 9;

		n = 0;
		do
		{
			n = n * 10 + p % 10;
			p = p / 10;
		}
		while( p != 0 );

		if( m == n )
		{
			printf( "%d", m );
		}
		m++;
	}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧