#4044: 可惡的WA


mark821119 (好久沒寫啦)


 你的答案是: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");
      }
}

#4045: Re:可惡的WA


example (學姊)


 你的答案是:153 370 371 407 153

 正確答案是:153 370 371 407

 但是我用DEV是跑出:370 371 407

 兩個問題如下

 1. 每組測試資料輸出結束後沒有換行

 2. 全域變數 g 沒有歸 0 

#4047: Re:可惡的WA


mark821119 (好久沒寫啦)


 你的答案是: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("");
      }
}

#6657: Re:可惡的WA


lukatw (龍浩)


 你的答案是: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...(超神奇...) 

#6658: Re:可惡的WA


lukatw (龍浩)


補充我的程式碼

 #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;

}

#6677: Re:可惡的WA


azxc50120 (qwe)


補充我的程式碼

 #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")