循环----短除法(c++)

目录

1389 数据分析
1750 有0 的数
1962 数值计算
1121 “倒
1469 数的统计
1511 数字之和为13 的整数
1149 回文数个数
1846 阿尔法乘积
1389 - 数据分析
题目描述
某军事单位为了保证信息的安全性,决定采用特殊的加密方法来传递信息,该方法的操作方式为,如果
要传递 2 个数字信息给友军,会直接传递给友军一个整数 n
n 是一个 10 位以内的整数),该整数的长度
代表要传递的第一个数字信息,分解出该整数的每一位,如果该位是偶数,那么将这这一位加到总和上
去,代表要传递的第二个数字信息。请你编写一个程序,从接收到的数字 n 中获取这 2 个数字信息。
比如:军事单位传递的数字为 12345678 ,则希望向友军传递的 2 个数字就是 8 (共有 8 位)和 20
2+4+6+8=20
输入
一个整数 n n<=999999999
输出
两个整数,用空格隔开
#include <iostream>
using namespace std;
int main()
{
	long long n,cnt,sum,a;
	cin>>n;
	a = n;
	cnt = 0;
	sum = 0;
	while(n!=0)
	{
		n = n/10;
		cnt++;
	}
	int cnt2 = 0;
	while(a!=0)
	{
		cnt2++;
		if(cnt%2==0)
		{
			if(cnt2%2==1)
			{
				sum = sum+a%10;
			}
		}
		else
		{
			if(cnt2%2==0)
			{
				sum = sum+a%10;
			}
		}
		a = a/10;
	}
	cout<<cnt<<endl<<sum;
	return 0;
}

1750 - 0 的数
题目描述
请求出 1~n 中含有数字 0 的数,有多少个?
输入
一个整数 n n<=999
输出
一个整数,代表 1~n 中含有数字 0 的数的个数。
#include <iostream> 
using namespace std;
int main()
{
	int n,q,a,cntws,cntz,a1,a2,a3;
	cin>>n;
	cntws = 0;
	cntz = 0;
	a = 1;
	q = n;
	while(q!=0)
	{
		q=q/10;
		cntws++;
	}
	if(cntws==1)
	{
		while(a<=n)
		{
			a1 = a/1%10;
			if(a1==0)
			{
				cntz++;
			}
			a++;
		}
	}
	else if(cntws==2)
	{
	    while(a<=n)
	    {
		    a1 = a/1%10;
		    a2 = a/10%10;
		    if(a2!=0)
		    {
		    	if(a1==0||a2==0)
	    	    {
	        		cntz++;
	        	}
		    }
		    a++;
	    }	
	}
	else
	{
	    while(a<=n)
	    {
		    a1 = a/1%10;
		    a2 = a/10%10;
		    a3 = a/100%10;
		    if(a2!=0&&a3==0)
		    {
		    	if(a1==0||a2==0)
	    	    {
	        		cntz++;
	        	}
		    }
		    else if(a3!=0)
		    {
		    	if(a1==0||a2==0||a3==0)
	        	{
	        		cntz++;
	        	}
		    }
		    a++;
	    }	
	}
	cout<<cntz<<endl;
	return 0;
}

1962 - 数值计算
题目描述
给出一个不多于 5 位的非负整数,要求
1 、求出它是几位数
2 、分别输出每一位数字
3 、按逆序输出各位数字,例如原数为 321, 应输出 123
输入
一个不大于 5 位的正整数
输出
三行
第一行 位数
第二行 用空格分开的每个数字
第三行 按逆序输出这个数
#include <iostream> 
using namespace std;
int main()
{
	int n,sumd,cnt,a,q;
	cin>>n;
	sumd = 0;
	q = n;
	cnt = 0;
	while(n!=0)
	{
		a = n%10;
		sumd = sumd*10+a;
		n = n/10;
		cnt++;
	}
	cout<<cnt<<endl;
	n = q;
	q = sumd;
	while(sumd!=0)
	{
		a = sumd%10;
        sumd = sumd/10;
        cout<<a<<" ";
	}
	cout<<" "<<endl;
	cout<<q<<endl;
	return 0;
}

1121 - “
题目描述
输入一个正整数 N 0 < N < 2147483647 ),将这个数倒着合成一个新数后输出。
比如: 543 ,倒过来是 345 (请注意: 34500 ,倒过来是 543 ,不是 00543 )!
输入
一行,一个正整数 N
输出
一行,一个正整数。
#include <iostream> 
using namespace std;
int main()
{
	int n,sumd,cnt,a,q;
	cin>>n;
	sumd = 0;
	q = n;
	cnt = 0;
	while(n!=0)
	{
		a = n%10;
		sumd = sumd*10+a;
		n = n/10;
		cnt++;
	}
	cout<<sumd<<endl;
	return 0;
}

1469 - 数的统计
题目描述
试计算在区间 1 n 的所有整数中,数字 x(0 x 9) 共出现了多少次?例如,在 1 11 中,即在
1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。再比如: 1 11 中,数字 0 只出现了 1 次。
输入
2 个整数 n x 之间用一个空格隔开。(n是一个 int 范围内的整数)
输出
1 个整数,表示 x 出现的次数。
#include <iostream>
using namespace std;
int main()
{
	int n,x,a,q,ns1,cnt;
	cin>>n>>x;
	cnt = 0;
	a = 1;
	while(a<=n)
	{
		q = a;
		while(q!=0)
		{
	    	ns1 = q%10;
	    	if(ns1==1)
	    	{
	    	    cnt++;	
	    	}
	    	q = q/10;
		}
		a++;
	}
	cout<<cnt;
	return 0;
}

1511 - 数字之和为 13 的整数
题目描述
求出 1~n   范围内的整数,使其数字之和为 13 ,请问这样的数有多少个?
例如:数 85  ,其数字之和为 8+5=138+5=13 ;数 373,其数字之和为 3+7+3=133+7+3=13
输入
一个整数 n n n 10000000 );
输出
输出一个整数,代表符合条件数的总个数。
#include <iostream>
using namespace std;
int main()
{
	int n,sum,nn,a,cnt;
	cin>>n;
	sum = 0;
	cnt = 0;
	a = 1;
	while(a<=n)
	{
		while(n!=0)
	    {
    		nn = n%10;
    		n = n/10;
    		sum = sum+n;
    	}
    	if(sum = 15)
    	{
    		cnt++;
    	}
		a++;
	}
	cout<<cnt<<endl;
	return 0;
}

1149 - 回文数个数
题目描述
一个正整数,正读和反读都相同的数为回文数。
例如 2222 131131 24422442 3707337073 66 \dots… 所有 位数都是回文数。给出一
个正整数 n n 1 \le n \le 100001 n 10000 ),求出 1,2, \dots ,n1,2,…, n 之中(包括 n   )的回
文数的个数。
输入
任意给定一个正整数 n n 0 \lt n \le 100000< n 10000
输出
一个正整数,表示 [ 1,n1, n ] 之间的回文数的个数。
#include <iostream>
using namespace std;
int main()
{
	int n,sum,a,q,cnt,z;
	z = 1;
	cin>>n;
	cnt = 0;
	while(z<=n)
	{
		q = z;
    	sum = 0;
    	while(z!=0)
    	{
    		a = z%10;
    		sum = sum*10+a;
    		z = z/10;
    	}
    	if(q==sum)
    	{
    		cnt++;
    	}
    	z = q;
    	z++;
	}
	cout<<cnt;
	return 0;
}

1846 - 阿尔法乘积
题目描述
计算一个整数的阿尔法乘积。对于一个整数 x* 来说,它的阿尔法乘积是这样来计算的:如果 x 是一个个
位数,那么它的阿尔法乘积就是它本身;否则的话, x* 的阿尔法乘积就等于它的各位非 0 的数字相乘所
得到的那个整数的阿尔法乘积。
例如: 4018224312  的阿尔法乘积等于 8 ,它是按照以下的步骤来计算的:
4×1×8×2×2×4×3×1×2 3072 3×7×2 42 4×2 8
编写一个程序,输入一个正整数(该整数的值在 int 范围内),输出它的阿尔法乘积。
输入
输入只有一行,即一个正整数。
输出
输出相应的阿尔法乘积。
#include <iostream>
using namespace std;
int main()
{
	int n,a,sum;
	cin>>n;
	while(n>=9)
	{
		sum = 1;
		while(n!=0)
		{
			a = n%10;
			if(a!=0)
			{
				sum = sum*a;
			}			
			n = n/10;
		}
		n = sum;
	}
	cout<<n;
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智能指针 智能指针shared_ptr的⽤法 的⽤法   为了解决C++内存泄漏的问题,C++11引⼊了智能指针(Smart Pointer)。   智能指针的原理是,接受⼀个申请好的内存地址,构造⼀个保存在栈上的智能指针对象,当程序退出栈的作⽤域范围后,由于栈上的变 量⾃动被销毁,智能指针内部保存的内存也就被释放掉了(除⾮将智能指针保存起来)。   C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使⽤时需添加头⽂件<memory>。   shared_ptr使⽤引⽤计数,每⼀个shared_ptr的拷贝都指向相同的内存。每使⽤他⼀次,内部的引⽤计数加1,每析构⼀次,内部的引⽤ 计数减1,减为0时,删除所指向的堆内存。shared_ptr内部的引⽤计数是安全的,但是对象的读取需要加锁。 1. shared_ptr的基本⽤法 初始化   可以通过构造函数、std::make_shared<T>辅助函数和reset⽅法来初始化shared_ptr: #include "stdafx.h" #include <iostream> #include <future> #include <thread> using namespace std; class Person { public: Person(int v) { value = v; std::cout << "Cons" <<value<< std::endl; } ~Person() { std::cout << "Des" <<value<< std::endl; } int value; }; int main() { std::shared_ptr<Person> p1(new Person(1));// Person(1)的引⽤计数为1 std::shared_ptr<Person> p2 = std::make_shared<Person>(2); p1.reset(new Person(3));// ⾸先⽣成新对象,然后引⽤计数减1,引⽤计数为0,故析构Person(1) // 最后将新对象的指针交给智能指针 std::shared_ptr<Person> p3 = p1;//现在p1和p3同时指向Person(3),Person(3)的引⽤计数为2 p1.reset();//Person(3)的引⽤计数为1 p3.reset();//Person(3)的引⽤计数为0,析构Person(3) return 0; }   注意,不能将⼀个原始指针直接赋值给⼀个智能指针,如下所⽰,原因是⼀个是类,⼀个是指针。 std::shared_ptr<int> p4 = new int(1);// error   reset()包含两个操作。当智能指针中有值的时候,调⽤reset()会使引⽤计数减1.当调⽤reset(new xxx())重新赋值时,智能指针⾸先是⽣ 成新对象,然后将就对象的引⽤计数减1(当然,如果发现引⽤计数为0时,则析构旧对象),然后将新对象的指针交给智能指针保管。 获取原始指针   std::shared_ptr<int> p4(new int(5)); int *pInt = p4.get(); 指定删除器   智能指针可以指定删除器,当智能指针的引⽤计数为0时,⾃动调⽤指定的删除器来释放内存。std::shared_ptr可以指定删除器的⼀个原 因是其默认删除器不⽀持数组对象,这⼀点需要注意。   2. 使⽤shared_ptr需要注意的问题   但凡⼀些⾼级的⽤法,使⽤时都有不少陷阱。 不要⽤⼀个原始指针初始化多个shared_ptr,原因在于,会造成⼆次销毁,如下所⽰: int *p5 = new int; std::shared_ptr<int> p6(p5); std::shared_ptr<int> p7(p5);// logic error 不要在函数实参中创建shared_ptr。因为C++的函数参数的计算顺序在不同的编译器下是不同的。正确的做法是先创建好,然后再传 ⼊。 function(shared_ptr<int>(new int), g()); 禁⽌通过shared_from_this()返回this指针,这样做可能也会造成⼆次析构。 避免循环引⽤。智能指针最⼤的⼀个陷阱是循环引⽤,循环引⽤会导致内存泄漏。解决⽅法是AStruct或BStruct改为weak_ptr。 struct AStruct; struct BStruct; struct AStruct { std::shared_ptr<BStruct> bPtr; ~AStruct() {
rtCell 实时微内核-具有下列功能: 1. 完全抢占的实时微内核结构,独立的内核栈,中断和系统调用均切换到内核栈执行; 2. 256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级; 3. 不同优先级任务完全抢占,同优先级之间可按先进先出或时间片轮转方式执行; 4. 在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定 时器、任务延迟、一次定时(此时需定义一超时后执行的过程);此服务任务的优先 级由其客户任务的最高优先级驱动,随之动态改变,以消除隐式优先级反转现象; 5. 提供任务(Task)、互斥锁(Mutex)、信号量(Semaphore)、位域标志(Flag)、 定时器(Timer)、优先级消息(Message)和环形队列(Ring buffer)内核对象; 6. 任何内核对象用一整数ID标识,而非指针,从而可避免用户任务野指针的副作用,内 核对象总数不超过61440(即60K); 7. 互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且总按优先级等待, 优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议还可支持不同互斥 锁的多次嵌套调用; 8. 其它对象的等待方式有:优先级等待和先进先出(节省内存)等待,在创建时设置; 9. 内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它 地方均以延迟过程调用(DPC)方式执行; 10. 任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可 引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此过程将在该任务 下次被调度时执行; 11. 删除避免机制,拥有互斥锁的任务及处于占有状态的互斥锁均具有防止被删除的机制, 要删除拥有互斥锁的任务必须自行终止或调用任务终止函数,而要删除任一个互斥锁 则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除; 12. 对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。 13. 在内核中实现了中断的进出接口,因此用户中断处理只需写标准的C函数,而不必关 心中断底层处理的细节; 14. 系统调用以陷阱指令(x86中int指令)实现,易于扩展到“内存保护”的进程模式; 15. 在内核库之外提供了一个简单的堆内存分配机制,用于内核对象动态内存分配时调用; 16. 支持毫秒级定时器,内核定时器周期为一毫秒; 17. 支持 X387/287 硬件浮点协处理器的任务状态保护,被动方式的任务浮点状态切换(开 中断执行,由于使用了特权指令实现,因此只能在纯DOS实模式下或虚拟机X386/X387及 后续机型上执行,而无法在Windows的DOS窗口中运行,但可在DOS的全屏方式下运行)。 giCell 视口裁减及消隐处理引擎-功能如下: 1. 完善而精巧的多视口裁剪和消隐处理引擎,与微内核rtCell紧密结合; 2. 真正的事件(或消息)驱动的多窗口(视口)技术,支持顶层窗口和透明窗口的显示和 裁剪处理; 3. 当前支持Label、Edit、Botton、Slider、Listbox、TreeView、ListView、Scrollbar和 Checkbox控件,其中的Edit控件支持剪切、复制和粘贴(ctrl+x,ctrl+c,ctrl+v); 4. 类 Windos 窗口,支持平移、缩放,光标切换、窗口系统按钮,及窗口和控件的过程回调; 5. 基于透明视口(或窗口)的裁剪和消隐处理,可生成任何非矩形(多态)窗口,本示例 中的三角形窗口就是基于透明视口来实现的; 7. 支持图形内存设备(GDC),有效避免窗口重绘时闪烁,易于实现视频及动画处理; 8. ListView支持标题栏平移和缩放,Scrollbar支持鼠标滚轮驱动; 9. 内存需求小,窗口和控件的缺省状态均不使用GDC(而是采用直接屏技术),所耗内存小, 因此实用性强,包括rtCell调度器、鼠标、键盘及图形驱动的库文件在DOS下仅70余K。 关于可文件Engine.lib和mcOutLib.obj: 1. 考虑到DOS内存的限制,库文件Engine.lib中的rtCell内核仅支持32个任务优先级(因为 优先级队列太占用内存),这样即使在640K内存下,也可创建上数百个内核及GUI对象,可满 足一定规模的应用程序要求; 2. 库文件mcOutLib.obj是目录giCell\mcOSLib下文件的编译结果,用于处理任务的浮点协 处理器(硬件)状态切换,任务浮点数状态初始化,内存分配,信息显示等操作(主要用于 内核),用户也可自己编译giCell\mcOSLib目录下的文件,注意:Borland C/C++ 3.1可能无 法识别其中的某些浮点数操作指令; 3. 文件MAIN.C是对Engine.lib使用的具体实例,在Borland C/C++ 3.1中编译时必须打开X 387/287选项和C函数参数传递约定,此文件还对任何使用透明窗口来生成非矩形窗口,以及 如何使用GDC生成动画进行了演示; 4. 注意其中的一些执行顺序:浮点数操作不得放到回调函数中执行,而只能在其它任务中 执行(可从回调函数中向其它任务发送消息来实现),否则程序将进行无限循环; 5. 因为浮点协处理器的任务状态切换机制使用了特权指令,所生成的可执行文件只能在纯 DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行; 6. 由MAIN.C所生成的可执行文件在AMD机器DOS实模式、X86虚拟机qemu-0.9.0-windows以及 Bochs-2.1.1下均执行良好,注意:生成的可执行文件依然是16位实模式。 压缩文件中包含窗口及其子控件的源代码,演示文件MAIN.C和DateTime.c,以及一个专用于 Borland C/C++ 3.1(GUI.DSK, GUI.PRJ)的工程文件。能力所限,不足之处,敬请指正! 请将其中的“BUG”发送到邮件:[email protected], [email protected],多谢!
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 出版社:清华大学出版社 ISBN:9787302142713 上架时间:2007-2-12 出版日期:2007 年1月 开本:16开 页码:1046 版次:1-1 编辑推荐   本书由编程语言先驱者Ivor Horton倾力而著,是国内第一本全面、深入介绍Visual C++ 2005的经典之作! 内容简介   本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++高效程序员。...    作译者   Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的顾问及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。Ivor Horton还著有Beginning Visual C++ 6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual C++ 2005编程 1 1.1 .NET Framework 1 1.2 CLR 2 1.3 编写C++应用程序 3 1.4 学习Windows编程 4 1.4.1 学习C++ 4 1.4.2 C++标准 5 1.4.3 控制台应用程序 5 1.4.4 Windows编程概念 6 1.5 集成开发环境简介 7 1.6 使用IDE 9 1.6.1 工具栏选项 9 1.6.2 可停靠的工具栏 10 1.6.3 文档 11 1.6.4 项目和解决方案 11 1.6.5 设置Visual C++ 2005的选项 23 1.6.6 创建和执行Windows应用程序 24 1.6.7 创建Windows Forms应用程序 26 1.7 小结 29 第2章 数据、变量和计算 31 2.1 C++程序结构 31 2.1.1 程序注释 36 2.1.2 #include指令——头文件 37 2.1.3 命名空间和using声明 37 2.1.4 main()函数 38 2.1.5 程序语句 38 2.1.6 空白 40 2.1.7 语句块 41 2.1.8 自动生成的控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2 C++中的关键字 43 2.2.3 声明变量 44 2.2.4 变量的初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 46 2.3.3 整型修饰符 47 2.3.4 布尔类型 48 2.3.5 浮点类型 48 2.3.6 ISO/ANSI C++中的基本类型 49 2.3.7 字面值 50 2.3.8 定义数据类型的同义词 50 2.3.9 具有特定值集的变量 51 2.3.10 指定枚举常量的类型 52 2.4 基本的输入/输出操作 53 2.4.1 从键盘输入 53 2.4.2 到命令行的输出 53 2.4.3 格式化输出 54 2.4.4 转义序列 55 2.5 C++中的计算 57 2.5.1 赋值语句 57 2.5.2 算术运算 58 2.5.3 计算余数 63 2.5.4 修改变量 63 2.5.5 增量和减量运算符 64 2.5.6 计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值