#4044: 可惡的WA


mark821119 (好久沒寫啦)

學校 : 國立東華大學
編號 : 12641
來源 : [134.208.3.230]
最後登入時間 :
2016-10-17 18:04:22
a040. 阿姆斯壯數 | From: [59.121.41.141] | 發表日期 : 2010-07-28 20:54

 你的答案是: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 (學姊)

學校 : 臺北市立麗山高級中學
編號 : 6634
來源 : [60.250.138.144]
最後登入時間 :
2022-08-09 17:07:42
a040. 阿姆斯壯數 | From: [118.166.113.108] | 發表日期 : 2010-07-28 22:07

 你的答案是:153 370 371 407 153

 正確答案是:153 370 371 407

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

 兩個問題如下

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

 2. 全域變數 g 沒有歸 0 

 
#4047: Re:可惡的WA


mark821119 (好久沒寫啦)

學校 : 國立東華大學
編號 : 12641
來源 : [134.208.3.230]
最後登入時間 :
2016-10-17 18:04:22
a040. 阿姆斯壯數 | From: [59.121.33.39] | 發表日期 : 2010-07-29 21:15

 你的答案是: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 (龍浩)

學校 : 國立勤益科技大學
編號 : 25866
來源 : [140.128.73.250]
最後登入時間 :
2012-09-28 13:43:31
a040. 阿姆斯壯數 | From: [125.231.131.228] | 發表日期 : 2012-05-26 20:29

 你的答案是: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 (龍浩)

學校 : 國立勤益科技大學
編號 : 25866
來源 : [140.128.73.250]
最後登入時間 :
2012-09-28 13:43:31
a040. 阿姆斯壯數 | From: [125.231.131.228] | 發表日期 : 2012-05-26 20:31

補充我的程式碼

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

學校 : 國立花蓮高級中學
編號 : 25612
來源 : [140.113.209.209]
最後登入時間 :
2018-06-02 00:54:18
a040. 阿姆斯壯數 | From: [61.31.170.116] | 發表日期 : 2012-06-07 22:00

補充我的程式碼

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



 
ZeroJudge Forum