iT邦幫忙

0

C++ 次方數型別的錯誤紀錄 pow()

#我是c++的菜鳥,我想來發文記錄一下我的學習#

今天我在寫zerogudge 的題目,a040(阿姆斯壯數)的時候發生了很詭異的事情,
當我執行的時候可怕的是就發生了!!

我輸入:99 1000 //註解:搜尋99到1000的阿姆斯壯數。

程式輸出:370 371 407//註解:99到1000的阿姆斯壯數。

What!! 什麼鬼,153到哪裡去了??
本因該輸出:153 370 371 407的阿~

以下是我發現錯誤前的程式碼

#include <iostream>
#include <math.h>
using namespace std;

int get_length(int x)
{
	int leng=0;
	while(x)
	{
		x/=10;
		leng++;
	}
	return leng;
}

int get_sum(int y)
{
    int n=get_length(y);
    int sum=0;
    for(int i=n;i>0;i--)
   {
    int single=y/pow(10,i-1);
    single =single % 10;
    double singlePow=pow(single,n);
    sum=singlePow+sum;
    
}
    return sum;
    
}

int main()
{
    int start;
    int end;
    int count=0;
    cin>>start;
    cin>>end;
    for(;start<=end;start++)
    {
        if(get_sum(start)==start)
        {
            cout<<start<<" ";
            count=count+1;
        }
    }
    if(count==0)
    {
        cout<<"none"<<endl;
    }
    
}

不過後來我把有存pow()這個函式的型別從int改成double就解決這個問題了,
但是為什麼會這樣我還是不太清楚。

各位高手如有閒情雅致就請幫我解答吧~~


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
Darwin Watterson
iT邦好手 1 級 ‧ 2020-07-10 20:35:26

錯棚囉!這裡是技術文章,不接受提問喔!/images/emoticon/emoticon03.gif

0
CWKSC
iT邦新手 4 級 ‧ 2020-07-12 01:25:48

路過,強迫症排版一下 /images/emoticon/emoticon56.gif

#include <iostream>
#include <math.h>

using namespace std;

int get_length(int x) {
	int leng = 0;
	while (x)
	{
		x /= 10;
		leng++;
	}
	return leng;
}

int get_sum(int y) {
	int n = get_length(y);
	int sum = 0;
	for (int i = n; i > 0; --i)
	{
		int single = y / pow(10, i - 1);
		single = single % 10;
		sum += pow(single, n);
	}
	return sum;
}

int main() {
	int start;
	int end;
	int count = 0;
	cin >> start;
	cin >> end;
	for (; start <= end; ++start)
	{
		if (get_sum(start) == start)
		{
			cout << start << " ";
			count++;
		}
	}
	if (count == 0)
	{
		cout << "none" << endl;
	}
	return 0;
}

我要留言

立即登入留言