Длинная арифметика - почему и зачем здесь atoi? - C (СИ)
Формулировка задачи:
#include <iostream> #include <conio.h> #include <stdio.h> #include <string.h> using namespace std; const int N=10000; int d[N]; int a[N]; int b[N]; int stepen(int dlina_str,int n) { int k; for (int z=0;z<n-1;z++) { int i=0; int slap; int dlina_d=0; while (d[dlina_d]!=-1) { a[dlina_d]=d[dlina_d]; dlina_d++; } for (i=0; i<dlina_d; i++) d[i]=0; i=0; k=dlina_d; for (i=0; i<dlina_str; i++) for (int j=0; j<dlina_d; j++) { if (d[j+i]==-1) d[j+i]++; slap=b[i]*a[j]+d[j+i]; if (slap>9) { if (d[i+j+1]+slap/10>9) { d[i+j+1]=(d[i+j+1]+(slap/10))%10; if (d[i+j+2]==-1) d[i+j+2]+=2; else d[i+j+2]++;} else if (d[i+j+1]==-1) d[i+j+1]+=(slap/10)+1; else d[i+j+1]+=(slap/10); k=j+i+1; d[j+i]=slap%10; } else { d[j+i]=slap; k=i+j; } } } return k; } void main() { /****** Ввод чисел ******/ setlocale(0, "Russian"); int n; char str1[N],prom[2]; cout<<"Введите число: ";cin>>str1; cout<<"Введите степень : ";cin>>n; int i=0; for (i=0; i<N; i++) d[i]=-1; i=0; int dlina_str=strlen(str1); // Длина числа int l=dlina_str-1; // Перевод строки в число while (i<dlina_str) {prom[0]=str1[i];a[l]=atoi(prom);b[l]=a[l];d[l]=a[l]; i++;l--;} /** ИСКЛЮЧЕНИЯ **/ if (a[0]==1) {cout<<1; getch(); exit(1);} if (a[0]==0) {cout<<0; getch(); exit(1);} // 0 в любой степени = 0 if (n==0) {cout<<1; getch(); exit(1);} // любое число в степени 0 = 1 /*** FUNCTION ***/ // Умножение само на себя степенное количество раз int k; // Длина результирующего массива k=stepen(dlina_str,n); cout<<"Результат:\n"; for (i=k;i>-1;i--) cout<<d[i]; getch(); }
Решение задачи: «Длинная арифметика - почему и зачем здесь atoi?»
textual
Листинг программы
str1[i] - '0'
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д