01/10/2018, 13:26
IDE khác nhau cho ra kết quả khác nhau
Mình có code đoạn test số amstrong cụ thể là số 153. Mà chẳng là khi test code bằng c free 5.0 hoặc code block thì nó báo sai còn test bằng visual studio thì nó lại báo đúng.
Cụ thể mình có kiểm tra từng dòng code thì thấy đến đoạn s=pow(5,3)=124 (ở vòng lặp lần 2) trong khi phải bằng 125 mới đúng. Mn chỉ mình fix như thế nào với
void at(int n) {
long sum=0,m=n,k,t;
k=3;
printf("k= %d
",k);printf("k= %d
",k);
while(m>0)
{
printf("******************
");
t=m%10;
printf("t=%d
",t);
int s=pow(t,k); /*Khi t=5, pow(5,3) =124 ?????? */
printf("%d^%d=%d
",t,k,s);
sum+=pow(t,k);
printf("Sum= %d",sum);
m/=10;
printf("
");
}
}
int main ()
{
at(153);
}
Bài liên quan
pow(a, b)
sẽ cho kết quả là số thực.Bạn viết thế này tức là bạn đang ép kiểu cho
pow(t, k)
thành 1 số nguyên, s có giá trị là phần nguyên của pow(i, k). Nhưng đời không như là mơ, kết quả củapow(t, k)
khi t = 5, k = 3 là 1 số như kiểu 124.99999999902 chẳng hạn, bạn lấy phần nguyên của nó -> ra 124 thay vì 125.Bạn nên viết hàm power riêng.
Còn kết quả khác nhau mỗi IDE khác nhau thì không quan trọng lắm, quan trọng là code bạn sai.
vậy là phải viết hàm power riêng dùng for ạ :v
Yeah.
[spoiler]này thì 20 char[/spoiler]
ok mình làm được rồi. cám ơn bạn nhiều. Mà cho mình hỏi nốt cái này
có đoạn code tính power
int power(int a,int b) {
int power=1;
for(int i=1;i<b;i++)
power*=a;
return power;
}
cái này thì mình cũng ép kiểu int cho nó thì khác gì cái int s=pow() nãy ạ
Cái này đâu phải ép kiểu int, bạn cho nó là giá trị int luôn ấy chứ.
i <= b chứ.
Warp hàm round, don’t reinvent the wheel
stackoverflow.com
Rounding up and down a number C++