你的答案是:153 370 371 407 153
正確答案是:153 370 371 407
但是我用DEV是跑出:370 371 407
超神的
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int g=0;
void Anum(int n)
{
int sum=0,k=n,j=n;
double a,c;
c=0;
while(k!=0)
{
c++;
k/=10;
}
while(j!=0)
{
a=(double)(j%10);
j/=10;
sum+=(int)pow(a,c);
}
if(sum==n){printf("%d ",n);g++;}
}
main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
for(;n<m;n++)
{
Anum(n);
}
if(g==0)printf("none");
}
}
你的答案是:153 370 371 407 153
正確答案是:153 370 371 407
但是我用DEV是跑出:370 371 407
兩個問題如下
1. 每組測試資料輸出結束後沒有換行
2. 全域變數 g 沒有歸 0
可是我改完用DEV還是跑出:370 371 407
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int g=0;
void Anum(int n)
{
int sum=0,k=n,j=n;
double a,c;
c=0;
while(k!=0)
{
c++;
k/=10;
}
while(j!=0)
{
a=(double)(j%10);
j/=10;
sum+=(int)pow(a,c);
}
if(sum==n){printf("%d ",n);g++;}
}
main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
g=0;
for(;n<m;n++)
{
Anum(n);
}
if(g==0){printf("none");}
puts("");
}
}
你的答案是:153 370 371 407 153
正確答案是:153 370 371 407
但是我用DEV是跑出:370 371 407
兩個問題如下
1. 每組測試資料輸出結束後沒有換行
2. 全域變數 g 沒有歸 0
可是我改完用DEV還是跑出:370 371 407
#include
#include
#include
int g=0;
void Anum(int n)
{
int sum=0,k=n,j=n;
double a,c;
c=0;
while(k!=0)
{
c++;
k/=10;
}
while(j!=0)
{
a=(double)(j%10);
j/=10;
sum+=(int)pow(a,c);
}
if(sum==n){printf("%d ",n);g++;}
}
main()
{
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
g=0;
for(;n {
Anum(n);
}
if(g==0){printf("none");}
puts("");
}
}
我也跟你一樣的問題,後來我慢慢測試總算找到問題了
問題出在sum+=(int)pow(a,c) 那邊,
pow輸出結果用強制型態轉換成int,測試153這個數字,會發現總合是152... (主要問題出現在5^3 那邊會變成124...)
如果sum型態宣告成float,而pow不用強制型態轉換,會發現總合剛好是153...(這時候5^3 是125..)
我也搞不懂為何用pow算5^3然後轉整數型態就會變成124...(超神奇...)
補充我的程式碼
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(void){
int a,b; //範圍
int i,temp,j; // i記錄目前測試數字, j記錄做幾次加總(記錄n)
int n; //為i的位數
float sum; //加總
bool flag;
scanf("%d %d",&a,&b);
for(i=a;i<b+1;i++){
n=(int)log10((double)i)+1;
temp = i;
sum=0;
j=n;
while(j > 0)
{
sum+=(pow((temp%10),n));
temp/=10;
--j;
}
if((int)sum == i){
printf("%d ",i);
flag = true;
}
}
if(flag == false)
printf("none");
system("pause");
return 0;
}
補充我的程式碼
#include
#include
#include
int main(void){
int a,b; //範圍
int i,temp,j; // i記錄目前測試數字, j記錄做幾次加總(記錄n)
int n; //為i的位數
float sum; //加總
bool flag;
scanf("%d %d",&a,&b);
for(i=a;i
n=(int)log10((double)i)+1;
temp = i;
sum=0;
j=n;
while(j > 0)
{
sum+=(pow((temp%10),n));
temp/=10;
--j;
}
if((int)sum == i){
printf("%d ",i);
flag = true;
}
}
if(flag == false)
printf("none");
system("pause");
return 0;
}
不要有system("pause")