2014年第五届蓝桥杯C/C++程序设计本科B组省赛-史丰收速算

2014年第五届蓝桥杯C/C++程序设计本科B组省赛-史丰收速算史丰收速算史丰收速算法的革命性贡献是 从高位算起 预测进位 不需要九九表 彻底颠覆了传统手算 速算的核心基础是 1 位数乘以多位数的乘法 其中 乘以 7 是最复杂的 就以它为例 因为 1 7 是个循环小数 0 如果多位数超过 就要进 1 同理 2 7 3 7 6 7 也都是类似的循环小数 多位数超过 n 7 就要进 n 下面



史丰收速算

(代码填空)


史丰收速算法的革命性贡献是:从高位算起,预测进位。不需要九九表,彻底颠覆了传统手算!


速算的核心基础是:1位数乘以多位数的乘法。


其中,乘以7是最复杂的,就以它为例。


因为,1/7 是个循环小数:0….,如果多位数超过 …,就要进1


同理,2/7, 3/7, … 6/7 也都是类似的循环小数,多位数超过 n/7,就要进n


下面的程序模拟了史丰收速算法中乘以7的运算过程。


乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。


乘以 7 的进位规律是:


满 … 进1,


满 … 进2,


满 … 进3,


满 … 进4,


满 … 进5,


满 … 进6


请分析程序流程,填写划线部分缺少的代码。


//计算个位 int ge_wei(int a) { if(a % 2 == 0) return (a * 2) % 10; else return (a * 2 + 5) % 10; } //计算进位 int jin_wei(char* p) { char* level[] = { "", "", "", "", "", "" }; char buf[7]; buf[6] = '\0'; strncpy(buf,p,6); int i; for(i=5; i>=0; i--){ int r = strcmp(level[i], buf); if(r<0) return i+1; while(r==0){ p += 6; strncpy(buf,p,6); r = strcmp(level[i], buf); if(r<0) return i+1; ______________________________; //填空 } } return 0; } //多位数乘以7 void f(char* s) { int head = jin_wei(s); if(head > 0) printf("%d", head); char* p = s; while(*p){ int a = (*p-'0'); int x = (ge_wei(a) + jin_wei(p+1)) % 10; printf("%d",x); p++; } printf("\n"); } int main() { f("1"); f("543"); return 0; }

填空之后:

#include 
  
    #include 
   
     #include 
    
      using namespace std; //计算个位 int ge_wei(int a) { if(a % 2 == 0) return (a * 2) % 10; else return (a * 2 + 5) % 10; } //计算进位 int jin_wei(char* p) { char* level[] = { "", "", "", "", "", "" }; char buf[7]; buf[6] = '\0'; strncpy(buf,p,6);//头文件 
     
       int i; for(i=5; i>=0; i--) { int r = strcmp(level[i], buf); if(r<0) return i+1; while(r==0) { p += 6; strncpy(buf,p,6); r = strcmp(level[i], buf); if(r<0) return i+1; if(r>0) return i; /填空,填空位置与上一语句相似。在此若填写else return i;,输出结果相同*/ } } return 0; } //多位数乘以7 void f(char* s) { int head = jin_wei(s); if(head > 0) printf("%d", head); char* p = s; while(*p) { int a = (*p-'0'); int x = (ge_wei(a) + jin_wei(p+1)) % 10; printf("%d",x); p++; } printf("\n"); } int main() { f("1"); f("543"); return 0; } 
      
     
    
  




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214600.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:52
下一篇 2026年3月18日 下午3:53


相关推荐

  • PostgreSQL索引类型

    PostgreSQL索引类型PostgreSQL有很多索引类型。每种索引类型都有各自适用的情景,具体使用哪一种索引取决于数据类型、表中的底层基本数据和执行的查询类型。接下来简单看一下PostgreSQL中可用的索引类型有哪些,以及各种情况下适合使用哪个索引。1、B-treePostgreSQL中,B-tree索引是最常用的一种索引类型。用索引扫描比顺序扫描速度快,因为它可能只需要读取少部分页面,而顺序扫描可能读取几千个页面。…

    2022年6月2日
    112
  • 商汤元萝卜× OpenClaw|不只下棋,更是龙虾AI智能体🦞

    商汤元萝卜× OpenClaw|不只下棋,更是龙虾AI智能体🦞

    2026年3月14日
    2
  • pycharm输出中文出现乱码的几种解决方法以及读取时打印出现乱码的解决[通俗易懂]

    pycharm输出中文出现乱码的几种解决方法以及读取时打印出现乱码的解决[通俗易懂]pycharm打印中文出现乱码,有几种情况第一种:对于这种情况,是普通的一种,你需要检查开头,是否加了#-*-coding:utf-8-*-还有importsysreload(sys)sys.setdefaultencoding(‘utf-8’)对于这两个处理中文输出的代码,最好每次处理中文时就加上,会减少很多问题第二种问题:

    2022年8月28日
    6
  • javaWeb前后台交互(Jdbc+Jsp+Servlet+mysql)

    javaWeb前后台交互(Jdbc+Jsp+Servlet+mysql)最近翻看以前的笔记,想到以前自己学习完servlet+jsp+mysql却怎么也把前后台连接不上,最后自己折腾好几天,终于搭建成功,写这个笔记也算是记录一下,代码是那个时候的代码,现在稍微加工了下。可以照下面步骤先把前后台连接上,有点成就感,给自己打打气加油加油,然后再研究代码怎么写的。毕竟都是从那个时候爬(自学坑太多)过来的。(这段话只是针对你我等小白,大神请自动忽略,谢谢配合)这次就写最简…

    2022年6月13日
    20
  • skill 并不是大模型的概念,是封装出来的

    skill 并不是大模型的概念,是封装出来的

    2026年3月12日
    2
  • createmutex怎么用_create的用法和短语

    createmutex怎么用_create的用法和短语HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针BOOL bInitialOwner, // 初始化互斥对象的所有者LPCTSTR lpName // 指向互斥对象名的指针);1. CreateMutex只是创建了一把锁,  这把锁你用来锁门还是锁抽屉还是锁

    2022年10月5日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号