В настоящее время я пытаюсь создать программу, которая печатает все номера армстронга до определенного числа. Я получаю странную ошибку при попытке запустить это. Пишет переполнение буфера. Часть, вызывающая это, кажется, находится в main(). Спасибо за любую помощь.
#include <stdio.h>
#define MAXIMUM 1000000
int ipow(int x, int power){
int z,t;
t = 0;
z = x;
for (t = 0; t < (power - 1); t++) {
z = z * x; }
return z;
}
int getLength(int x) {
int a;
a = 1;
for (a=1;1;a++) { if (x < ipow(10,a) && x >= ipow(10,(a-1))) return a; }
}
int getExpSum(int x) {
int summe,r,s,t;
int digit[8]={0,0,0,0,0,0,0,0};
summe=0;
s = getLength(x);
t = x;
r = 1;
for (s=getLength(x);s!=0;s--){
digit[s] = t % 10;
t = t / 10;
}
for(r=1;r<(getLength(x)+1);r++)
{
summe = summe + ipow(digit[r],getLength(x));
}
return summe;
}
int Armstrong (int x) {
if (getExpSum(x)==x) {
printf("%d ist eine Armstrongzahl\n", x);
return 1;
}
return 0;
}
void main(){
int z;
z = 0;
for (z=0;z<MAXIMUM;z++){
Armstrong(z+1);
}
}
for (a=1;a=a;a++)
сложно и бесполезно. - person UmNyobe   schedule 06.11.2012for (a = 1; ; ++a)
. Илиfor (a = 1; 1; ++a)
, если вам не нравится внешний вид пустого условия, но некоторые компиляторы предупредят вас об этом. - person Steve Jessop   schedule 06.11.2012