Поиск цифрового корня числа, заданного строкой - C (СИ)
Формулировка задачи:
нужно искать цифровой корень, но что-бы можна было записовать неограниченое количество цифр, тоесть через стринг..
#include<stdio.h> #include <windows.h> int main (void) { SetConsoleCP(1251); SetConsoleOutputCP(1251); int n,m; printf("vvedit a"); scanf("%d",&n); int k=n; do { for(m=0; n; n/=10) m+=n%10; n=m; }while(n>9); printf("chuslo %d - %d",k, n); }
Решение задачи: «Поиск цифрового корня числа, заданного строкой»
textual
Листинг программы
#include<conio.h> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<math.h> #define N 13//сколь надо батя? char Impossibilite[N]; void EndlessnessForYouMyDarling(char *x); int Find(long long,long long); main() { char x[10]="56789"; EndlessnessForYouMyDarling(x); printf("%s", Impossibilite); getch(); } void EndlessnessForYouMyDarling(char *x) { int IsOdd=0;int temp; int OneTime=0; IsOdd=strlen(x)%2; if(IsOdd == 1) { int Number1; Number1=x[0]-'0'; temp=Number1; if(Number1 == 1){Impossibilite[0]='1';} else if(Number1 < 4 && Number1 > 1){Impossibilite[0]='1';} else if(Number1 < 9 && Number1 >= 4){Impossibilite[0]='2';} else if(Number1 == 9){Impossibilite[0]='3';} } else { int Number2; Number2=((x[0]-'0')*10)+x[1]-'0'; temp=Number2; if(Number2 >= 9 && Number2 < 16){Impossibilite[0]='3';} if(Number2 >= 16 && Number2 < 25){Impossibilite[0]='4';} if(Number2 >= 25 && Number2 < 36){Impossibilite[0]='5';} if(Number2 >= 36 && Number2 < 49){Impossibilite[0]='6';} if(Number2 >= 49 && Number2 < 64){Impossibilite[0]='7';} if(Number2 >= 64 && Number2 < 81){Impossibilite[0]='8';} if(Number2 >= 81 && Number2 < 100){Impossibilite[0]='9';} } long Double;long long Difference;long Row=0;long kk;long long rr;char tempss[10];int t=0; Double=atoi(Impossibilite); for(long i=0;i<(N);i++) { if(OneTime == 0){ Difference=temp-(int)pow(Double,2); Difference=Difference*100+(x[++Row]-'0')*10+(x[++Row]-'0'); OneTime=1; } rr=Find(Difference,atoi(Impossibilite)*2); Difference=Difference-(atoi(Impossibilite)*10*2+rr)*rr; itoa(rr,tempss,10); strcat(Impossibilite,tempss); if(strlen(x) <= ++Row){ /*if(t == 0){t=1;Impossibilite[Row++]='.';}*/Difference=Difference*100;} else {--Row;Difference=Difference*100+(x[++Row]-'0')*10+(x[++Row]-'0');} }//for } int Find(long long k,long long d) { long long answer=0; for(long int i=1;i<100000;i++) { if(k > ((d*10+i)*i))answer++; else { break; } } return answer; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д