Manchester


私信TA

用户名:wenyajie

访问量:332188

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65567
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
设n=5;则sum=a+aa+aaa+aaaa+aaaaa;

2017-12-17 14-44-36屏幕截图.png


分析:

1.n个数相加,考虑到进位如99999+9999,需要长度为n+1的数组存放结果;

2.如图,个位结果为n-0个a的和,十位结果为n-1个a的和...万位为n-4个a的和;

    for ( int i = n; i > 0; i-- )
        sum[i] += i * a;

3.求出每位的和后,处理进位:从个位数开始,每一位先向前面一位进位,然后再求这一位对应数值(图中先蓝色,后绿色)

    for ( int i = n; i > 0; i-- )
    {
        sum[i - 1]    += (sum[i] / 10);
        sum[i]        %= 10;
    }

4.输出结果:如果sum[0]==0的话,最高位没有收到进位,输出sum[1]到sum[n],否则输出sum[0]到sum[n];

    if ( sum[0] == 0 )
    {
        for ( int i = 1; i <= n; i++ )
            printf( "%d", sum[i] );
    }else
        for ( int i = 0; i <= n; i++ )
            printf( "%d", sum[i] );

注意事项:
开辟数组长度为n+1;最高位数下标为0,个位数下标为n;


参考代码:  a为正

#include <stdio.h>
#include <malloc.h>
void format( int *sum, int n );


void function( int *sum, int a, int n );


/*===================================================*/
int main()
{
    int    a, n;
    int    *sum;

    scanf( "%d%d", &a, &n );
    sum = (int *) malloc( (n + 1) * sizeof(int) );
    format( sum, n );
    function( sum, a, n );
    return(0);
}


/*===================================================*/
void format( int *sum, int n )
{
    for ( int i = 0; i <= n; i++ )
        sum[i] = 0;
}


/*===================================================*/
void function( int *sum, int a, int n )
{
    for ( int i = n; i > 0; i-- )
        sum[i] += i * a;
/*------------------------------------*/
    for ( int i = n; i > 0; i-- )
    {
        sum[i - 1]    += (sum[i] / 10);
        sum[i]        %= 10;
    }
/*------------------------------------*/
    if ( sum[0] == 0 )
    {
        for ( int i = 1; i <= n; i++ )
            printf( "%d", sum[i] );
    }else
        for ( int i = 0; i <= n; i++ )
            printf( "%d", sum[i] );
            return ;
}

等哪天上面代码不正确了:说明测试数据有a为负数,那么用下面代码正负a都对,a为负,会加负号;

#include <stdio.h>
#include <malloc.h>
#include <math.h>
void format( int *sum, int n );


void function( int *sum, int a, int n );


/*===================================================*/
int main()
{
    int    a, n;
    int    *sum;

    scanf( "%d%d", &a, &n );
    sum = (int *) malloc( (n + 1) * sizeof(int) );
    format( sum, n );
    function( sum, a, n );
    return(0);
}


/*===================================================*/
void format( int *sum, int n )
{
    for ( int i = 0; i <= n; i++ )
        sum[i] = 0;
}


/*---------------------------------------------------*/
void function( int *sum, int a, int n )
{
    for ( int i = n; i > 0; i-- )
        sum[i] += i * fabs( a );
/*------------------------------------*/
    for ( int i = n; i > 0; i-- )
    {
        sum[i - 1]    += (sum[i] / 10);
        sum[i]        %= 10;
    }
/*------------------------------------*/
    if ( sum[0] == 0 )
    {
        if ( a < 0 )
            printf( "-" );
        for ( int i = 1; i <= n; i++ )
            printf( "%d", sum[i] );
    }else{
        if ( a < 0 )
            printf( "-" );
        for ( int i = 0; i <= n; i++ )
            printf( "%d", sum[i] );
    }
    return;
}


别忘点赞哦-.-

 

0.0分

19 人评分

  评论区

牛逼
2023-12-24 11:35:57
#include<stdio.h>
#include<math.h>
int main()
{
	int a,n,s=0,i,amount;
    double b,c;
	scanf("%d %d",&a,&n);
	c=b=a;
	for(i=1;i<=n;i++)
	{
		amount=c*pow(10,(i-1));
		c=c+b*pow(10,-i);
		s=s+amount;
	}

	printf("%d\n",s);
 } 




大佬求解,为什么我这个代码是错的
2021-11-21 23:43:48
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,n;
	long long s,d;
	s=0;
	d=0;
	cin>>a>>n;
	for(int i=0;i<n;i++)
	{
		d=d+a*pow(10,i);
		s+=d;
	}
	cout<<s;
}
2021-08-08 22:53:11
#include<stdio.h>


int main()
{
	int a, n, i, S;
	printf("please input a and n:");
	scanf("%d %d", &a, &n);
	if(a <= 9 && n >= 1)
	{
		S = a;
		for(i = 2; i <= n; i++)
		{
			a = (10 * a) + (a % 10);
			S += a;
			printf("a = %d\n",a);
		}

	printf("S = %d\n", S);
	
	}


	return 0;
}
2021-04-29 23:01:12
1 #include<stdio.h>
  2 
  3 
  4 int main()
  5 {
  6     int a, n, i, S;
  7     printf("please input a and n:");
  8     scanf("%d %d", &a, &n);
  9     if(a <= 9 && n >= 1)
 10     {
 11         S = a;
 12         for(i = 2; i <= n; i++)
 13         {
 14             a = (10 * a) + (a % 10);
 15             S += a; 
 16             printf("a = %d\n",a);
 17         }
 18 
 19     printf("S = %d\n", S);
 20 
 21     }
 22 
 23 }   
~
2021-04-29 22:59:30
666
2021-03-05 09:53:49
写的不错! mark一下
2017-12-25 18:14:18
对于大数据同样正确
2017-12-19 17:21:46
  • «
  • 1
  • »