Cactuc
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <stdio.h> #include <string.h> #include <conio.h> #include <math.h> #include <stdlib.h> const char NUM_CHARSET[] = ".0123456789"; int getnumber(int &iNum, double &dNum) { int ch, i = 0, pos = 0; char num[16]; while ((i<15)&&((ch = getchar())!=10)) { num[i++] = ch; } num[i] = '\0'; if ((pos = strspn(num, NUM_CHARSET)) != strlen(num)) { return -1; } else { if (strchr(num, '.') != 0) { dNum = atof(num); return 0; } else { iNum = atoi(num); return 1; } } } int main(int argc, char* argv[]) { double dNum; bool bFound; int i, j, max_i, max_j, n, n1, n2, n3, iNum, result; do { printf("Please enter interger number: "); if ((result = getnumber(iNum, dNum)) != -1) { if (result) n = iNum; else n = (int)dNum; bFound = false; max_i = floor(sqrt(double(n))); for (i=1; i<=max_i; i++) { n1 = n - i*i; if (n1 > 0) { max_j = floor(sqrt(double(n1))); for (j=1; j<=max_j; j++) { n2 = n1 - j*j; if (n2 > 0) { n3 = floor(sqrt(double(n2))); if (n2 == n3*n3) { bFound = true; break; } } } if (bFound) break; } } if (bFound) { printf("The interger number %d is a sum of squares of %d, %d, %d: %d + %d + %d\n", n, i, j, n3, i*i, j*j, n2); } else { printf("The interger number %d is not any sum of squares of integer numbers.\n", n); } } } while (result != -1); } |