博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代码赏析——史丰收速算
阅读量:7061 次
发布时间:2019-06-28

本文共 1506 字,大约阅读时间需要 5 分钟。

/*标题:史丰收速算     史丰收速算法的革命性贡献是:从高位算起,预测进位。    不需要九九表,彻底颠覆了传统手算!     速算的核心基础是:1位数乘以多位数的乘法。     其中,乘以7是最复杂的,就以它为例。     因为,1/7 是个循环小数:0.142857...,    如果多位数超过 142857...,就要进1     同理,2/7, 3/7, ... 6/7 也都是类似的循环小数,    多位数超过 n/7,就要进n     下面的程序模拟了史丰收速算法中乘以7的运算过程。     乘以 7 的个位规律是:偶数乘以2,奇数乘以2再加5,都只取个位。     乘以 7 的进位规律是:         满 142857... 进1,     满 285714... 进2,     满 428571... 进3,     满 571428... 进4,     满 714285... 进5,     满 857142... 进6 */#include
#include
//计算个位 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[] = { "142857", "285714", "428571", "571428", "714285", "857142" }; 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; //填空 } } return 0;}//多位数乘以7void 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("428571428571"); f("34553834937543"); return 0;}

 

转载于:https://www.cnblogs.com/fengyanlover/p/5246068.html

你可能感兴趣的文章
Activiti 查找流程状态(流程下一步)
查看>>
Angular UI Route
查看>>
一个应届毕业生程序员的独白
查看>>
编译安装ZABBIX客户端(代理)
查看>>
jsp下拉框中显示数据库信息&&jsp 下拉框从数据库中如何取值?
查看>>
Linux系统编程 --- 共享内存及内存映射【十全十美】
查看>>
H5页面快速搭建之高级字体应用实践
查看>>
centos6.5、centos6.6修改ssh默认端口号
查看>>
文本文件和二进制文件
查看>>
轻量级smurf源码
查看>>
linux下桌面环境的介绍及VNC的使用
查看>>
深浅拷贝——string
查看>>
主从复制模式下跳过错误
查看>>
剑指offer17
查看>>
samba文件共享
查看>>
WannaCry勒索软件还在继续传播和感染中
查看>>
TarsGo新版本发布,支持protobuf,zipkin和自定义插件
查看>>
Snap up RS3gold 3500M 60% off rs3 for sale &learn
查看>>
oracle函数
查看>>
json与String的转化
查看>>