Manchester- 求s=a+aa+aaa+aaaa+aa...a的值(n为1亿都ok,可正负,带图解)

2023-10-18 06:18

本文主要是介绍Manchester- 求s=a+aa+aaa+aaaa+aa...a的值(n为1亿都ok,可正负,带图解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解题思路:
设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的和;

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

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

1
2
3
4
5
     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];

1
2
3
4
5
6
7
     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为正

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#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为负,会加负号;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#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 ;
}

这篇关于Manchester- 求s=a+aa+aaa+aaaa+aa...a的值(n为1亿都ok,可正负,带图解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/230735

相关文章

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

JavaScript中使用正则判断一个值是否是数字,包含正负,小数点

使用正则表达式来判断: if(/^[+-]?\d*\.?\d*$/.test(str)){//为数字} 实际情况中可以将+去掉,

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体数据直接进行了统一的插入排序,每个数据之间的间隙是1,这里的1指的就是步长序列gap。在希尔排序中,我们会将整体数据一分为多份,进行散布式的插入排序,这时候每一个子序列之间的

算法图解(8~10贪心,动态规划,K最近邻算法)

贪心算法 在每一步都选择局部最优解,从而期望最终得到全局最优解。 贪心算法并不总能保证全局最优解,因此需要满足以下两个条件: 贪心选择性质:可以通过局部最优选择构造出全局最优解。最优子结构:问题的最优解包含其子问题的最优解。 实例:给定面额的硬币,用最少硬币凑出指定金额 int minCoins(vector<int>& coins, int amount) {int count = 0

Java虚拟机--JVM内存堆布局图解分析

文章来源: https://www.cnblogs.com/WJ5888/p/4374791.html JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢了,当然原因肯定不止这一个,如在JVM中没有数据寄存器,指令集使用的是栈来保存

【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】

一、原题 链接:Training on Likes Vs Dislikes | Codewars YouTube had a like and a dislike button, which allowed users to express their opinions about particular content. It was set up in such a way that you

基于Tomcat的JavaWeb(ASP)项目构建(图解)

目录 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 ​编辑 运行项目 项目结果 ​编辑 查看配置基础项目 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 运行项目 项目结果 查看配置基础项目 了解Web Application: Explo

风趣图解LLMs RAG的15种设计模式-第二课

全部用的是Midjourney连续性一致性绘图画成