📄 mop_1.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
#define MAX 5000
#define N 11
#define UINT unsigned int
int InitArray( void );
int Get( int , int , int ); /*输入a1,k,n,得到an*/
UINT Get_Bit( int ); /*返回值是A的位数*/
UINT Get_Sum( int ); /*求ai*k的各位总值*/
int Get_allBit( void ); /*求a(i+1)各位和*/
int pow10( int ); /*求10的i次方 */
int A_big[MAX]; /*定义全局数组,可以存放MAX位*/
int pow10(int i) /*求10的i次方 */
{
int sum = 1;
if( i == 0 )
return 1; /*10的0次方为1*/
else {
do{
sum = sum * 10;
i --;
}while( i > 0 ); /*计算10的i次方*/
}//else
return sum; /*返回10的i次方*/
}//pow10
int Get_allBit( void ) /*求a(i+1)各位和*/
{
int sum = 0;
int i = 0;
do{
sum += A_big[i++]; /*求各位的和*/
}while(A_big[i] != N);
return sum;
}//get_allBit
int InitArray( void ) /*定义数组,初始值为N*/
{
int i;
for( i=0 ; i < MAX ; i ++ )
{
A_big[i] = N;
}
return 1;
}/*init_array*/
int Get( int a1 , int k , int n ) /*输入a1,k,n,得到an*/
{
UINT sum , i , Couter;
UINT cout_1 = Get_Bit(a1);
do{
A_big[--cout_1] = a1 % 10;
}while( cout_1 > 0 ); /*把a1移动到数组中*/
Couter = 0; /*计算算过的ai*/
do
{
Couter ++;
sum = Get_Sum(k);
do{
i = 0;
A_big[0] = A_big[0] + 1; /*逐步加 */
/*开始——把扫描点回归到第一个数组元素空间*/
while(A_big[i] == 10){
A_big[i] = 0;/*原位清零*/
if(A_big[i+1] == 11)
A_big[i+1] = 0;
A_big[i+1] = A_big[i+1] + 1;/*高位进一*/
i ++;
}/*while*/
/*结束——把扫描点回归到第一个数组元素空间*/
if( Get_allBit() == sum ) break; /*监测进位的情况,并执行进位*/
}while(1);/*do_while.+1操作*/
}while( Couter < n );/*do_while*/
return 1;
}//get
UINT Get_Bit( int A ) /*返回值是A的位数*/
{
int i = 0;
do{ /*计算A的位数,记为i*/
A = A / 10;
i ++;
}while(A != 0); /*while*/
return i;
} //get_bin
UINT Get_Sum( int k ) /*求ai*k的各位总值*/
{
int i , ai , sum , sum1;
sum = 0 ; /*sum*/
ai = 0; /*ai*/
i = 0; /*变量*/
do{ /*求ai的值 */
ai += A_big[i] * pow10(i);
i ++ ;
}while( A_big[i] != N );
sum1 = k * ai ; /*求ai*k的值 并初始化sum1*/
do{ //求ai*k各位的和
sum += sum1 % 10;
sum1 = sum1 / 10;
}while( sum1 > 0 );
return sum;
}
int main(void)
{
FILE *fp;
int a1 , k;
int n;
int i;
if((fp = fopen("in.txt" , "r")) == NULL)
return -1; /*不能打开输入文件*/
fscanf( fp , "%d" , &a1); /*读取a1*/
fscanf( fp , "%d" , &k); /*读取k*/
fscanf( fp , "%ld" , &n); /*读取n*/
fclose( fp );
InitArray();
Get(a1,k,n); /*求得an*/
if((fp = fopen("out.txt" , "w")) == NULL)
printf("erro"); /*输出到文件*/
i=0;
while( A_big[i] != N )
i++; /*数组中记录了i位*/
i--;
do{
fprintf( fp , "输出结果为:%d" , A_big[i--] );
}while( i >= 0 ); /*输出结果*/
fclose( fp );
return 1; /*程序顺序完成*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -