閒來無事,寫個小計算器自己玩玩。
用法:程序名,社保比率(比如上海爲18),工資。
所有的參數中數字的不支持浮點數輸入。
程序1:已知稅前工資,求稅後工資。
program 1:
#include <stdio.h>
#include <ctype.h>
#define ENSBASE 2800
#define TAXBASE 3500
static int suKou[4]={0,25,125,375};
static int taxRate[4]={5,10,15,20};
static int weigh[6] = {0,1,10,100,1000,10000};
static int comp_Num[6] = {1,2,3,4,5,6};
int covToInt(char*);
int getWeigh(int);
float ensCalc(int);
float uSalCalc(float, int);
void main(int arg,char** args)
{
int ensRate = 0;
int preSalary = 0;
float urtlSalary = 0;
float ensTax = 0;
char* rate = args[1];
char* sal = args[2];
ensRate = covToInt(rate);
preSalary = covToInt(sal);
ensTax = ensCalc(ensRate);
urtlSalary = uSalCalc(ensTax,preSalary);
printf("ens tax = %f\n",ensTax);
printf("actual salary = %f\n",urtlSalary);
}
int covToInt(char* parm)
{
int len = 0;
int comp_Max = 0;
int dig[6] = {0};
int sum = 0;
while('\0' != *(parm)){
dig[len++] = toascii(*(parm)) - 48;
parm++;
}
comp_Max = comp_Num[len];
while(len > 0){
sum += dig[len-1] * getWeigh(comp_Max-len);
len--;
}
return sum;
}
int getWeigh(int index)
{
return weigh[index];
}
float ensCalc(int rate)
{
return ENSBASE * (rate/100.00);
}
float uSalCalc(float ens, int pSal)
{
float usal = pSal - ens - TAXBASE;
float outSal = 0;
while(1){
if(usal <= 0){
outSal = pSal - ens;
break;
}
if(usal <= 500.00){
outSal = pSal - ens - usal*0.05;
break;
}
if(usal <= 2000.00){
outSal = pSal - ens - usal*0.10 + 25;
break;
}
if(usal <= 5000.00){
outSal = pSal - ens - usal*0.10 + 125;
break;
}
if(usal <= 20000.00){
outSal = pSal - ens - usal*0.10 + 375;
break;
}else{
break;
}
}
return outSal;
}
程序2:已知稅後工資,求稅前工資。
/*
x: preSalary
er: ensRate
tr: taxRate
s: suKou
x - (x - base*er)*tr + s = u
x - x*tr = u- s - base*er*tr
x= (u- s - base*er*tr)/(1-tr)
*/
#include <stdio.h>
#include <ctype.h>
#define ENSBASE 2800
#define TAXBASE 3500
static int suKou[4]={0,25,125,375};
static int taxRate[4]={5,10,15,20};
static int weigh[6] = {0,1,10,100,1000,10000};
static int comp_Num[6] = {1,2,3,4,5,6};
int covToInt(char*);
int getWeigh(int);
float ensCalc(int);
float pSalCalc(float, int, int, int, float);
void main(int arg,char** args)
{
int ensRate = 0;
float preSalary[4] = {0.0};
float urtlSalary = 0.0;
float ensTax = 0.0;
char* rate = args[1];
char* sal = args[2];
int i = 0;
ensRate = covToInt(rate);
urtlSalary = covToInt(sal);
ensTax = ensCalc(ensRate);
printf("ens tax = %f\n",ensTax);
while(i < 4){
preSalary[i] = pSalCalc(urtlSalary,suKou[i],ensRate,taxRate[i],ensTax);
printf("preTax salary = %f\n",preSalary[i]);
printf("\n");
i++;
}
}
int covToInt(char* parm)
{
int len = 0;
int comp_Max = 0;
int dig[6] = {0};
int sum = 0;
while('\0' != *(parm)){
dig[len++] = toascii(*(parm)) - 48;
parm++;
}
comp_Max = comp_Num[len];
while(len > 0){
sum += dig[len-1] * getWeigh(comp_Max-len);
len--;
}
return sum;
}
int getWeigh(int index)
{
return weigh[index];
}
/* x= (u- s - base*er*tr)/(1-tr) */
float pSalCalc(float uSal, int s, int er, int tr, float ens)
{
float outSal = (uSal - s - (TAXBASE*(er/100.0)*(tr/100.0)))/(1 - (tr/100.00));
if(outSal <= 3500.00){
outSal = uSal + ens;
}
return outSal;
}
float ensCalc(int rate)
{
return ENSBASE * (rate/100.00);
}