Поиск цифрового корня числа, заданного строкой - 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;
}