今天看了一本书,上面说,如果你想编程,就要先把自己想做的先写在纸上,然后按流程去做。
我才突然发现,为什么我解决不了这个问题,原来,我一直在用脑子想,脑子再聪明也记不住所有环节。特别是编程。里面要注意的太多了。所以我就写了一份流程。在写的时候,就把问题给解决了,然后把源码打上,呵呵,原来一切如此简单。
#include<iostream>
usingnamespacestd;



intquan(long);//求一个数的位数,也称这个数的最高权
intbit(long);//求一个数最高的位上面的数;
longsumhigh(long);//砍掉一个数的最高位;
longpow(intx,inty);//算一个数的正整数幂



intmain()

...{

longa,b,c,high,d;//a,是放输入数的,b是放结果的,c是放过程结果的,high是最高位
inty;//d是放a的值,y是放最高位的

cout<<"请输入一个整数,我们将判断它包含的数中有多少个1: ";
cin>>a;

d=a;
b=0;
high=0;
for(longi=quan(a);i>0;--i)

...{


if(quan(a)<i)y=0;

elsey=bit(a);


if(y==1)

...{
c=high*pow(10,i-1)+sumhigh(a)+1;
b=b+c;
}

elseif(y>1)

...{
c=high*pow(10,i-1)+pow(10,i-1);
b=b+c;
}
elseif(y==0&&i!=1)

...{
c=high*pow(10,i-1);
b=b+c;
}
elseif(y==0&&i==1)

...{
c=high;
b=b+c;
}

high=d/pow(10,i-1);
if(y!=0)a=sumhigh(a);

}

cout<<"包含1的个数有:"<<b<<"个 ";



}


intquan(longx)

...{
boola=true;
intb=0;
do

...{
if(x<1)

...{
a=false;
}
else

...{
x=x/10;
b++;
}
}while(a);
returnb;
}

intbit(longx)

...{
inta,b=1;
do

...{
if(x>=10)

...{
x=x/10;
}
elseb=0;
}while(b);
returnx;
}

longsumhigh(longx)

...{
longa;
a=x-bit(x)*pow(10,quan(x)-1);
returna;
}

longpow(intx,inty)

...{
longa=1;
if(y>0)

...{
for(inti=0;i<y;++i)

...{
a=a*x;
}
}
elseif(y==0)a=1;


returna;
}
分享到:
相关推荐
这类问题不仅有助于理解数据结构的基本概念,也是评估算法效率和复杂度的良好案例。本文将探讨如何使用分治策略来解决一个特定的问题——在一个包含n个整数的数组中找到第二大的元素。 #### 分治算法原理 分治...
可以使用两个指针,一个从开头(`str[0]`),另一个从结尾(`str[strlen(str) - 1]`)开始移动: ```c int start = 0; int end = strlen(str) - 1; while (start ) { if (str[start] != str[end]) { return 0;...
21、 对于下图给出的有向网,写出用Dijkstra方法求从顶点A到图中其它顶点的最短路径的算法,并写出执行算法过程中顶点的求解次序及从顶点A到各顶点路径的长度。 22、 对于上图给出的有向图,写出最小成本生成树,...
总的来说,解决"仅遍历一次得到链表的倒数第n个结点"的问题,需要理解和运用链表的特性和双指针技巧,这是一种在数据结构和算法面试中常见的问题,能够很好地考察候选人的逻辑思维和编程能力。在实际的编程练习中,...
青蛙过河问题是一个经典的算法问题,要求我们计算出在给定石柱数和荷叶数的情况下,能够跳过河的最大青蛙数。 一、问题描述 青蛙过河问题可以被描述如下:有一队青蛙从小到大,编号为 1, 2, …, n。这些青蛙最初都...
给定一个包含n个元素的一维线性序列a[p:r],从这n个元素中找出第k小的元素,1<=k<=n。设a[0:14]={2,9,11,3,14,7,10,8,15,4,13,1,6,5,12},k = 8,采用线性时间选择算法解决该问题。 1)写出算法实现代码并截屏程序...
中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些...
公式A-36是宽带网络性能分析中的一...这个公式给出了在M/M/1模型下,队列平均长度E(n)与到达数据包的方差E(v^2)的关系。在实际网络性能分析中,它有助于预测和优化网络资源的利用率,以及调整网络配置以提高服务质量。
中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 38 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 38 3.12 我不...
在“删数问题”中,目标是给定一个n位正整数a和一个正整数k,找到一种删除k个数字的方式,使得剩下的数字按照原顺序组成的新的正整数最小。这个问题可以通过贪心策略来解决,具体策略是优先删除最近下降点的数字,也...
- M8063的上延可以检测出通信指令本次通信的错误信息,D8063的值代表不同的错误代码,例如6315表示从站号超出范围,6316表示读写寄存器个数超出范围等。 #### 四、MODBUS指令示例 1. **读取从机数据指令** - RD3...
第五个问题是100个开关以1到100编号,控制着100个灯泡,初始状态均为熄灭状态,第一次按下所有编号为1的倍数的开关,第二次按下所有编号为2的倍数的开关,以此类推,第100次按下所有编号为100的倍数的开关,问最后有...
根据提供的文件信息,本文将围绕“STM32延时子程序1ms、1s”这一主题展开讨论,旨在帮助读者理解如何通过软件手段实现高精度的延时功能。 ### STM32简介 STM32是意法半导体(STMicroelectronics)推出的一系列基于...
输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。 输入样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 ...
给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中该点对间的距离最小。 2.实验目的 1)掌握递归与分治法的基本思想及基本原理。 2)掌握使用分治法求解问题的一般特征及步骤。 3)掌握分治法的设计方法...
这意味着在1秒的采样时间内,FFT可以解析到1Hz的频率变化。若要提高频率分辨率,需要增加采样点数或延长采样时间。 FFT结果的对称性意味着我们通常只关注前半部分,即小于采样频率一半的结果,这部分包含了信号的...
一般来说,有几个未知数就列出几个方程,所列方程必须满足:(1)方程两边表示的是同类量;(2)同类量的单位要统一;(3)方程两边的数值要相等。 知识点二:列方程组解应用题中常用的基本等量关系 1. 行程问题: * ...
q7将1个“1”改写为a q8复写a后的状态 q9移动到a段最右侧 q10右移到1段最右侧 q11将最右侧1改为b q12复写b后的状态 q13移动到b段的左侧字符 q14移动至1段最左侧 q15将a改写为B q16复写B后的状态 q17将b改写为1 q18...
- 第1题,从A到B的单射函数有2^3=8个,非单射函数包括满射和非满射,满射有2种,非满射通过列举得出有4种。 - 第2题,通过等价关系R,可以将集合A分为3个子集{1,5},{2,3,6},{4},形成划分。 - 第3题,偏序集的...