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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы