淘宝等金本息贷款计算器

用于计算淘宝等额本金型贷款,利率当前为万分之2.1,实际结果比淘宝的还精确(淘宝只保留到小数点后2位)。

自动从系统时间判断闰年,因此如果系统时间错误可能会导致1天的误差。

下载地址

[cpp]#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include<time.h>
using namespace std;

void main(void)
{
double P{}, R{}, sum{};
int N{}, start{}, M[]{ 31,28,31,30,31,30,31,31,30,31,30,31 };
struct tm local;
time_t t{ time(NULL) };
localtime_s(&local,&t);
int years{ local.tm_year + 1901 };

M[1] += ((0 == years% 400) || (0 != years%100) && (0 == years%4)) ? 1 : 0;
//cout << years << endl << M[1]<<endl;

cout << “输入当前执行利率,如万分之5则键入5:”;
cin >> R;
R /= 10000;
cout << “输入本金,如一万块则键入10000:”;
cin >> P;
cout << “输入期数,如一年则键入12:”;
cin >> N;
cout << “输入起始月份,如当前为9月则键入9:”;
cin >> start;

for (int i{ 1 }; N > 0; P -= P / N, N–, i++, start++)
{
double mon{ P*R*M[(start – 1) % 12]+P/N };
cout << “第” << i << “次需还本息:” << mon << endl;
sum += mon;
}
cout << “共计:” << sum << endl;
system(“Pause”);
}[/cpp]

C语言新手误区

个人踩坑总结,以下内容不一定完全原创。不定期更新。

scanf读入字符的问题

新手常常忘记变量前的取地址符“&”,而编译器又不会报错,如果代码没问题运行又出错,一定记得检查读入,因为在逻辑上,前提正确并且过程正确,则结论一定正确,如果结论错误,则要么是前提出问题,要么是过程出问题。C语言作为强类型语言,读入和输出都比其他类型如Python麻烦许多,不仅要区分整型、浮点型、字符、字符串,又要注意读入之后清空缓冲区,还要区分scanf与getchar/getch/getche/gets的区别。这里推荐2篇文章

C语言中scanf函数与空格回车

结合缓冲区谈谈C语言getchar()、getche()、getch()的区别

指针的初始化与赋值

先要弄明白两个符号“*”和“&”,前者名叫 间接运算符,后者名叫 取地址符,间接运算符有3个作用

[c]
int *p; //声明一个指针

int x=2*3; //乘号

*P=2;//取得p指针对应的数值,不加*号的p表示的是地址
[/c]

指针在初始化的时候=的右边只能是地址,唯一例外的是

[c]int *p=0;  //表示指针为空,而不是赋值为0[/c]

指针的赋值必须要注意 = 号两边的类型必须一致,比如

[c]int *p,a=25,b[]={1,2,3};

//地址赋给地址

p=b;

p=&a;

//数值赋给数值

*p=a;

*p=b[0];[/c]

至于字符串指针,在初始化的时候是

[c]int *p="this is a pointer";[/c]

刚不是说初始化时=号右边必须是地址吗?对,话没错,所以这里实际是把p指针指向了”this is a pointer”这句话的地址;sizeof(p)时就会发现端倪,p的大小是char类型的大小,而不是”this is a pointer”这句话的大小。另外,这条语句实际隐含了 const,也就是说

[c]//这两句话完全一致

int *p="this is a pointer";

const int *p="this is a pointer";[/c]

因而,无法修改”this is a pointer”这句话,但p可以重新指向。

[c]p[]="01234";//这时就可以通过p[下标]修改字符串的内容了[/c]

单引号与双引号的区别

区别很简单,使用单引号时是字符,而使用双引号时是字符串。

[c]char a=’abcde’//编译器会报错,字符不能超过4位

char a="abcdefg";//正常[/c]

另外值得注意的是,字符printf时对应%c,字符串对应%s;

 

《数据结构》作业题01部分

01-1

给定K个整数组成的序列{ N1, N2, …, NK },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。

输入格式:

输入第1行给出正整数 K (<= 100000);第2行给出K个整数,其间以空格分隔。

输出格式:

在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。

输入样例:6
-2 11 -4 13 -5 -2

输出样例:20

01-2

Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni+1, …, Nj } where 1 <= i <= j <= K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example, given sequence { -2, 11, -4, 13, -5, -2 }, its maximum subsequence is { 11, -4, 13 } with the largest sum being 20.

Now you are supposed to find the largest sum, together with the first and the last numbers of the maximum subsequence.

Input Specification:

Each input file contains one test case. Each case occupies two lines. The first line contains a positive integer K (<= 10000). The second line contains K numbers, separated by a space.

Output Specification:

For each test case, output in one line the largest sum, together with the first and the last numbers of the maximum subsequence. The numbers must be separated by one space, but there must be no extra space at the end of a line. In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

Sample Input:10
-10 1 2 3 4 -5 -23 3 7 -21

Sample Output:10 1 4

俺的作答如下,Python实现

[python]

#01-1
def MaxSubseqSum4():
K=int(input())
A=raw_input().split(‘ ‘)
ThisSum=0
MaxSum=0

for i in range(K):
ThisSum+=int(A[i])

if ThisSum>MaxSum:
MaxSum=ThisSum
elif ThisSum<0:
ThisSum=0

print MaxSum

MaxSubseqSum4()
#01-2
def MaxSubseqSum5():
K=int(input())
A=raw_input().split(‘ ‘)
ThisSum=0
MaxSum=0
start=0
temp=0
end=K-1
for i in range(K):
ThisSum+=int(A[i])

if ThisSum<0:
ThisSum=0
temp=i+1
elif ThisSum>MaxSum:
MaxSum=ThisSum
start=temp
end=i
elif MaxSum==0:
A[start]=0
A[end]=0
print MaxSum,A[start],A[end]

MaxSubseqSum5()
[/python]

phpmyadmin出现问题,紧急调试中

问题如下:
链接表的额外特性尚未激活。要查出原因,请点击此处。
使用配置文件中定义的控制用户连接失败。
服务器上运行了 Suhosin。请先查看文档中是否有类似的情况。

由于我是使用的apt-get安装的phpmyadmin,检查配置文件发现,/usr/share/phpmyadmin下的config.inc.php实际上映射的是/etc/phpmyadmin/config.inc.php。
打开/etc/phpmyadmin/config.inc.php,根据错误提示,找到控制用户的代码:

$cfg[‘Servers’][$i][‘controluser’] =
$cfg[‘Servers’][$i][‘controlpass’] =

删掉等号后面的东西,改成:

$cfg[‘Servers’][$i][‘controluser’] = ‘root’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘123456’;

123456为你root的密码,保存,刷新phpmyadmin页面 使用配置文件中定义的控制用户连接失败。 问题解决。
网络下下载一个对应你phpmyadmin版本的安装包,我下载的是:phpMyAdmin-3.2.2-all-languages.zip,解压scripts/create_tables.sql文件,登录phpmyadmin,新建一个名叫phpmyadmin的数据库,导入create_tables.sql文件。
然后修改/etc/phpmyadmin/config.inc.php,将:

$cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
$cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma_bookmark’;
$cfg[‘Servers’][$i][‘relation’] = ‘pma_relation’;
$cfg[‘Servers’][$i][‘table_info’] = ‘pma_table_info’;
$cfg[‘Servers’][$i][‘table_coords’] = ‘pma_table_coords’;
$cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma_pdf_pages’;
$cfg[‘Servers’][$i][‘column_info’] = ‘pma_column_info’;
$cfg[‘Servers’][$i][‘history’] = ‘pma_history’;
$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma_designer_coords’;

前的注释去掉,不过,我的本身就这样,我没做任何修改,登出phpmyadmin,再登录,如何?链接表的额外特性尚未激活。要查出原因,请点击此处。 问题解决!
至于 服务器上运行了 Suhosin。请先查看文档中是否有类似的情况。 问题,suhosin本身是加强PHP安全性的脚本,不影响mysql使用,无须理会。