九的余数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数。

输入
第一行有一个整数m(1<=m<=8),表示有m组测试数据;
随后m行每行有一个自然数n。
输出
输出n整除九之后的余数,每次输出占一行。
样例输入
3
4
5
465456541
样例输出
4
5
4

解答:

  首先本题的思路首先可以发现如果直接取余是不可行的,因为后面的数有几百万位的,纵使long double 也远远不够。这时候就需要考虑如何解决“大数对9取余”这个问题。我们发现,a=an*10n+an-1*10n-1+...+a2*102+a1*101+a0 .    a%9 = (an*10n+an-1*10n-1+...+a2*102+a1*101 )%9 = (an*10n)%9+(an-1*10n-1)%9...+(a2*102)%9+(a1*101)%9 + a0%9 = (an%9)*(10n%9) +(an-1%9)*(10n-1%9)+...+(a2%9)*(102%9)+(a1%9)*(101%9).+a0%9  =  (an%9)*1 +(an-1%9)*1+......+(a2%9)*1+(a1%9)*1+a0%9  =   (an+an-1+...+a2+a1+a0)%9.

即“这个数的各个位上的数字的和”对9取余即得结果。

首先代码如下:

 #include <iostream>
#include <stdlib.h>
using namespace std; int main(){
int m;
cin>>m;
while(m--){
string n;cin>>n;
int res = ;
while(n.length()!=){
string temp = n.substr(,);
res += atoi( temp.c_str() );
n = n.substr( ,n.length()- );
} cout<<res%<<endl;
} }

结果是TimeLimitExceeded 。

遂改进,得如下代码:

 #include<iostream>
#include<vector>
#include<string>
#include<cstring> using namespace std; vector<int>a;
int DIV(string m)//分切数并存储
{
int num=m.size();//存储数的长度
for(int i=;i<num;i++){
a.push_back(m[i]-'');
}
return num;
} int main(){
int M;
cin>>M;
while(M--){
string n;//存储输入的数
cin>>n;
long num=DIV(n);
long sum=; for(int i=;i<num;i++){
sum+=a[i];
}
cout<<sum%<<endl;
a.clear();
}
return ;
}

终AC,可以发现,对于string的substr()操作是比较费时的,甚至比压入vector的时间还长。这是优化代码的一个方向。

NYOJ 105的更多相关文章

  1. nyoj 105 九的余数

    点击打开链接 九的余数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数整除九之后的余数. 输入 ...

  2. NYOJ 105 其余9个

    九的余数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 如今给你一个自然数n,它的位数小于等于一百万,如今你要做的就是求出这个数整除九之后的余数. 输入 第一行有一 ...

  3. 圈水池 nyoj 78 凸包算法

    圈水池 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一个牧场,牧场上有很多个供水装置,现在牧场的主人想要用篱笆把这些供水装置圈起来,以防止不是自己的牲畜来喝水, ...

  4. nyoj 999

    nyoj 999: 点击打开题目链接 题目思路,处理一下地图,把 D E 能看到的地方标记一下.然后就是暴力广搜一下.标记状态,因为同样在同一个点,但是你刚出发到达那点和找到D之后到达相同的点和找到E ...

  5. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  6. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  7. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  8. 安装PHP sphinx扩展 sphinx-1.1.0/sphinx.c:105:2: error: too few arguments 错误

    表现: /home/sphinx-1.1.0/sphinx.c: In function 'php_sphinx_client_read_property':/home/sphinx-1.1.0/sp ...

  9. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

随机推荐

  1. Java 9将采用新的版本字符串格式

             在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改.使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化 ...

  2. Professional JavaScript for Web Developers 3rd Edition ---读书笔记

    1. DOMContentLoaded DOM树构建完成时触发该事件 load 页面加载完毕触发 原生js document.addEventListener('DOMContentLoaded', ...

  3. 圆形背景的TextView

    [应用场景]: [需要的xml]:shape_circle.xml <?xml version="1.0" encoding="UTF-8"?>&l ...

  4. 利用CSS3实现图片无间断轮播图的实现思路

    前言:图片轮播效果现在在各大网站都是非常普遍的,以前我们都是通过postion的left or right来控制dom的移动,这里我要说的是利用css3来制作轮播!相比以前通过postion来移动do ...

  5. css(二)

    本文是一些作者在长期写代码中总结的常用css查询,写在本博客中,方便以后查询. 1. 颜色属性:   color HEX(十六进制色:color: #FFFF00 --> 缩写:#FF0) RG ...

  6. Linux安全基础:find命令的使用

    find 命令用于查找文件系统中的指定文件. *命令格式:find pathname -option [-print -exex -ok] 1.pathname要查找的目录路径 ~表示home目录 . ...

  7. Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录

        Sharepoint学习笔记—习题系列--70-576习题解析  为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是:     1. ...

  8. iOS多线程之5.GCD的基本使用

      上一篇文章我对GCD的几个基本概念做了介绍,但是大家看完了可能觉得对理解GCD并没有什么卵用.其实会用GCD其实很简单,只要记住两条就可以了. 1. 主队列里的任务必须在异步函数中执行.   主队 ...

  9. WaterfallFlowLayout瀑布流用重写UICollectionViewFlowLayout类实现

    最近调研瀑布流,在gitHub上下了个Demo发现它的所有视图都是用Main.storyboard拖的, 自己研究半天没研究明白; 然后就又找了一个Demo, 它的视图全是手打的, 但是实现的方法不太 ...

  10. mac osx install mysql

    (1) download mysql dmg (2) install (3) /usr/local/mysql/bin/mysql -u root -p change password