2015-11-26 3 views
1

Таким образом, мне нужно реализовать эту формулу в C:Реализовать формулу суммы в C

enter image description here

Где п вводится пользователем и должно быть> = 1. Ci является i- й разряд числа п с к цифр, и Ки с линией является дополнением Ci (цифра + дополнение = 9). Например, число 21262 удовлетворяет этому уравнению, так как:

= 7^5 + 8^4 + 7^3 + 3^2 + 7^1 = 16807 + 4096 + 343 + 9 + 7 =

Я попытался сделать алгоритм и превратить его в программу на C, но когда я выполняю, что-то пойдет не так. У меня возникли проблемы с формулировкой цикла, который делает мощность k-i + 1.

#include <stdio.h> 

int main() { 
int n, t, k, c, i, s, power, j; 
do { 
    printf("Enter n = "); 
    scanf("%d", &n); 
} while (n < 1); 

t = n;     // Here we save the value of n, and operate with t 
k = 0;       // k counts the number of digits 
while (t > 0) { 
    t = t/10;  
    k++;      // k = number of digits 
}         
t = n; 
s = 0; 

for (i = 1; i <= k; i++) {   // Starts the sum from i to k 
    c = 9 - t % 10;     // Complements the digits 
    power = 1; 

    for (j = 1; j <= k-i+1; j++)  // Start of loop that powers th number 
     power = c * power; 
    s = s + power; 
    t = t/10; 
} 

if (s == n) 
    printf("The number fulfills the equation"); 
else 
    printf("The number doesn't fulfill the equation"); 
return 0; 
} 

Как вы можете видеть, я попытался решить проблему питания, сделав петлю, которая умножает Ĉ дополнение само по себе к-я + 1 раз. Но что-то не так. Пожалуйста помоги!

+1

вы прочитать номер из слева направо, а не справа налево –

+0

для удобства чтения людьми, пожалуйста, последовательно отступайте от кода. В общем, отступ после КАЖДОЙ открывающей скобки '{' и un-indent перед каждой закрывающей скобкой '}' – user3629249

ответ

1

Как читать справа налево, власть должна быть i и не k - i + 1

#include<stdio.h> 


int main() { 
    int n, t, k, c, i, s, power, j; 
    do { 
     printf("Enter n = "); 
     scanf("%d", &n); 
    } while (n < 1); 

    t = n;     // Here we save the value of n, and operate with t 
    k = 0;       // k counts the number of digits 
    while (t > 0) { 
     t = t/10; 
     k++;      // k = number of digits 
    } 
    t = n; 
    s = 0; 

    for (i = 1; i <= k; i++) {   // Starts the sum from i to k 
     c = 9 - (t % 10);     // Complements the digits 
     power = 1; 

     for (j = 1; j <= i; j++)  // Start of loop that powers th number 
      power = c * power; 
     s = s + power; 
     t = t/10; 
    } 

    if (s == n) 
     printf("The number fulfills the equation"); 
    else 
     printf("The number doesn't fulfill the equation"); 
    return 0; 
} 
+0

Большое вам спасибо, сейчас это работает. Но я не понимаю, как это я, а не k-i + 1. Как интерпретировать эту формулу? – Quant

+0

например, если n равно 12345, для i = 1 у вас есть 't% 10' = 5, ваша петля справа не слева –

+0

О, право. Но как я мог знать, что это я?Я думаю, что я не смог бы это сделать, даже если бы знал, что должен его изменить – Quant

1

Вам моя функция использования пау (Ь, р) в <math.h> заголовочном файле. Это может сократить вашу работу. Вам не нужно использовать внутренний цикл, используйте этот код вместо внутреннего контура

power = pow(c,i); 

Этот код может понравиться this-

#include<stdio.h> 
#include<math.h> 


int main() { 
    int n, t, k, c, i, s, power, j; 
    do { 
     printf("Enter n = "); 
     scanf("%d", &n); 
    } while (n < 1); 

    t = n;     // Here we save the value of n, and operate with t 
    k = 0;       // k counts the number of digits 
    while (t > 0) { 
     t = t/10; 
     k++;      // k = number of digits 
    } 
    t = n; 
    s = 0; 

    for (i = 1; i <= k; i++) {   // Starts the sum from i to k 
     c = 9 - (t % 10);     // Complements the digits 
     power = 1; 

     power = pow(c,i);  // multiply the c by i th time by the pow(b,p) function under math.h. 
     s = s + power; 
     t = t/10; 
    } 

    if (s == n) 
     printf("The number fulfills the equation"); 
    else 
     printf("The number doesn't fulfill the equation"); 
    return 0; 
} 
1

я попробовал другой подход к вашему вопросу, и он прекрасно работает. .. я думаю, что это может быть полезно для вас, так что я его размещения:

Примечания: Я использовал функцию для вычисления количества цифр в введенном значении, а также включен math.h файл для использования функции pow()

так вот мой код:

#include <stdio.h> 
#include <math.h>//math.h to use pow() function 

int num_digits(int n); //the sub function to caluclate number of digits 

int main() 
{ 
    int n,c,t,t1,to_add,ans=0,d,i; 

    printf("enter number: "); 
    scanf("%d",&n); 

    t=t1=n; 
    d=num_digits(n); //function called 

    for(i=1;i<=d;i++) 
    { 
     t=t1%10; 
     c=9-t; 
     to_add=pow(c,i); //pow() used here 
     ans=ans+to_add; 
     t1=t1/10; 
     printf("%d\n",t1); 
    } 

    if(ans==n) 
     printf("condition fulfilled!\n"); 
    else 
     printf("condition not fulfilled"); 

    return 0; 
} //main function ends here 

int num_digits(int n) //function to caluclate number of digits 
{ 
    int i,c; 
    c=n; 
    for(i=1;c>10;i=i+1) 
     { 
      c=n/pow(10,i); //pow() even used here 
     } 
    return i; 
} 

и, кстати, ваш вопрос довольно сложно :)

-thankyou

Смежные вопросы