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;
}
}
但程式運行不了,沒有任何顯示,可以告訴我哪里錯了嗎
uj5u.com熱心網友回復:
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++;
}
uj5u.com熱心網友回復:
主要問題在于:回圈體內邏輯的問題,變數的變化,這種最好通過輸出中間結果來發現問題在什么地方,可以多學學基礎知識,也可以看看我的文章,修改后的代碼如下,錯誤之處表明了的:
#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;
}
}
uj5u.com熱心網友回復:
因為四位數乘以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);
uj5u.com熱心網友回復:
再引申一下,如何求給定倍數的反序數,這樣來測驗一個語言的效率,比如求一個數的6倍,是他的反序數,求10萬以內的,或求100萬以內的。uj5u.com熱心網友回復:
這種小運算量在現代計算機上測不出來語言的效率,即便解釋性語言,比如DOS中帶的QBasic,也是秒出結果轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35813.html
標籤:基礎類
